用ThreadLocal方法为每个线程新建一个对象和new区别

用ThreadLocal方法为每个线程新建一个对象和new区别

http://img1.sycdn.imooc.com//climg/608a24710946c92806010181.jpg

    ​这里使用了ThreadLocal代替之前的new为每个线程分配对象,他们之间有什么区别嘛,new对象的话也是为每个线程都分配一个对象吧。

    ​是不是new出来的对象只能用一次就销毁了,而通过ThreadLocal出来的对象可以循环使用呢

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,1、使用ThreadLocal和new关键字创建的对象是一样的,只是用ThreadLocal效率更高,比如创建1000个对象,new关键字需要书写1000次关键字调用构造方法,而ThreadLocal并不用这么繁琐。

    ​2、通过new关键字创建的对象也可以循环使用。

祝学习愉快!

  • fever腾腾 提问者 #1

    那这里用new关键字是会生成1000个对象,不就相当于没有循环使用嘛

    如果new能循环使用的话,那这里使用ThreadLocal好像没啥意义啊....


    我理解是:

    http://img1.sycdn.imooc.com//climg/608a5d0509cf4ee408100112.jpg

    1. 这里创建了10个线程,然后用new关键字的话,每次都要new一次对象,所以循环1000次,一共new了1000个对象。

    2. ​而使用ThreadLocal的话,只有每个线程第一次调用时才会new对象,所以10个线程,一共new了10次对象。

    所以第一种情况是不是意味着每一次new出来的对象只用了一次就丢弃了,而第二种情况可以重复用很多次...

    2021-04-29 15:18:22
  • 好帮手慕小班 回复 提问者 fever腾腾 #2

    同学你好,同学的理解是正确的。

    祝学习愉快!

    2021-04-29 17:13:34
  • 老师,有10个线程,每次线程执行方法时,可以获取到自己对应的threadlocal,然后可以重复使用自己的threadlocal,也就是线程和threadlocal是对应的。对吧?

    2021-06-19 16:55:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师