在Thread对象本身中存储特定于线程的变量

时间:2015-12-29 07:08:56

标签: java multithreading

我正在阅读B. Goetz Java Concurrency in practice,现在我正在关于ThreadLocal如何运作的部分。我曾经把它想象成一个类似Map的结构,但他说那个

  

从概念上讲,您可以将ThreadLocal视为持有   存储特定于线程的值的映射,但 这是    不是如何实际实施 特定于线程的值    存储在Thread对象本身 ;当线程终止时,   特定于线程的值可以被垃圾收集。

他的意思是什么?如何在线程中存储特定于线程的值?

1 个答案:

答案 0 :(得分:1)

问题是,如果是ThreadLocal对象中的线程映射到值,那么值永远不会被垃圾收集,因为ThreadLocal对象永远不会被销毁。

所以它基本上相反 - Thread对象包含映射到其线程特定值的ThreadLocal个键的映射。这样,一旦线程完成,就会收集完整的地图。

很少有其他优化,它实际上使用直接ThreadLocalMap实现而不是实现Map接口,使用增量哈希代码和类似的东西,但基本上概念如上所述。