2015-12-29 35 views
0

我在閱讀B. Goetz Java Concurrency in practice,現在我正在關於ThreadLocal如何工作的部分。我曾經思考它作爲一個Map狀結構,但他表示,在線程對象本身中存儲線程特定變量

從概念上講,你能想到一個ThreadLocal的作爲持有 地圖存儲線程特定值,雖然這是 不是如何實際執行線程特定值 存儲在線程對象本身;當線程終止時,線程特定的值可以被垃圾收集。

他是什麼意思?我如何在線程中存儲線程特定的值?

+1

[Java的ThreadLocal是如何實現的?](http://stackoverflow.com/questions/1202444/how-is-javas-threadlocal-implemented-under-the-hood) –

回答

1

的問題是,如果它是線程的地圖在ThreadLocal對象的值,該值將永遠不會被垃圾收集的ThreadLocal對象不會被銷燬。

所以它基本上是相反的 - Thread對象包含ThreadLocal鍵映射到其線程特定值的映射。這樣一旦線程完成,完整的映射就會被垃圾收集。

其他優化很少,它實際上使用直接執行ThreadLocalMap而不是實現Map接口,使用增量散列碼和類似的東西,但基本上這個概念如上所述。