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

发布于 2022-09-05 14:55:54 字数 278 浏览 18 评论 0

线程池重用线程时,会对ThreadLocal的值进行清空吗?
我在看《Java并发编程实战》一书的第8章时,有如下一句话:

只有当线程本地值的生命周期受限于任务的生命周期时,在线程池的线程中使用ThreadLocal才有意义,而在线程池的线程中不应该使用ThreadLocal在任务之间传递值。

麻烦帮我稍微解释下这句话,特别是前半句,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

找回味觉 2022-09-12 14:55:54

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

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

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

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文