线程池重用线程时,会对ThreadLocal
的值进行清空吗?
我在看《Java并发编程实战》一书的第8章时,有如下一句话:
只有当线程本地值的生命周期受限于任务的生命周期时,在线程池的线程中使用
ThreadLocal
才有意义,而在线程池的线程中不应该使用ThreadLocal
在任务之间传递值。
麻烦帮我稍微解释下这句话,特别是前半句,谢谢!
线程池重用线程时,会对ThreadLocal
的值进行清空吗?
我在看《Java并发编程实战》一书的第8章时,有如下一句话:
只有当线程本地值的生命周期受限于任务的生命周期时,在线程池的线程中使用
ThreadLocal
才有意义,而在线程池的线程中不应该使用ThreadLocal
在任务之间传递值。
麻烦帮我稍微解释下这句话,特别是前半句,谢谢!
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
不会清空,要你自己去清空。
这句话翻译的有问题应该是:
Task指的是一个Thread所执行的任务。
总之就是告诉你,如果你能够在使用ThreadLocal的时候管理它的创建、销毁,那么就可以用,否则会出问题。原因是ThreadLocal是和Thread绑定的,如果Thread是从Thread Pool中拿出来的,那么意味着Thread可能会被复用,如果被复用,你就一定得保证这个Thread上一次结束的时候,其关联的ThreadLocal被清空掉,否则就会串到下一次使用。