为了账号安全,请及时绑定邮箱和手机立即绑定

线程池重用线程时,会对ThreadLocal的值进行清空吗?

线程池重用线程时,会对ThreadLocal的值进行清空吗?

Smart猫小萌 2019-03-01 10:36:47
线程池重用线程时,会对ThreadLocal的值进行清空吗?我在看《Java并发编程实战》一书的第8章时,有如下一句话: 只有当线程本地值的生命周期受限于任务的生命周期时,在线程池的线程中使用ThreadLocal才有意义,而在线程池的线程中不应该使用ThreadLocal在任务之间传递值。 麻烦帮我稍微解释下这句话,特别是前半句,谢谢!
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

不会清空,要你自己去清空。

只有当线程本地值的生命周期受限于任务的生命周期时,在线程池的线程中使用ThreadLocal才有意义

这句话翻译的有问题应该是:

只有当ThreadLocal的生命周期受限于Task的生命周期时,在Thread Pool的Thread里使用ThreadLocal才有意义。

Task指的是一个Thread所执行的任务。

总之就是告诉你,如果你能够在使用ThreadLocal的时候管理它的创建、销毁,那么就可以用,否则会出问题。原因是ThreadLocal是和Thread绑定的,如果Thread是从Thread Pool中拿出来的,那么意味着Thread可能会被复用,如果被复用,你就一定得保证这个Thread上一次结束的时候,其关联的ThreadLocal被清空掉,否则就会串到下一次使用。

查看完整回答
2 反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 3007 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号