在使用線程池時應特別注意對ThreadLocal的使用

ThreadLocal可以爲當前線程保存局部變量,而InheritableThreadLocal則可以在創建子線程的時候將父線程的局部變量傳遞到子線程中。



如果使用了線程池(如Executor),那麼即使即使父線程已經結束,子線程依然存在並被池化。這樣,線程池中的線程在下一次請求被執行的時候,ThreadLocal對象的get()方法返回的將不是當前線程中設定的變量,因爲池中的“子線程”根本不是當前線程創建的,當前線程設定的ThreadLocal變量也就無法傳遞給線程池中的線程。



因此,必須將外部線程中的ThreadLocal變量顯式地傳遞給線程池中的線程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章