線程池重用線程時,會對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被清空掉,否則就會串到下一次使用。
添加回答
舉報
0/150
提交
取消