我正在阅读B. Goetz Java Concurrency in practice,现在我正在关于ThreadLocal
如何运作的部分。我曾经把它想象成一个类似Map
的结构,但他说那个
他的意思是什么?如何在线程中存储特定于线程的值?从概念上讲,您可以将ThreadLocal视为持有 存储特定于线程的值的映射,但 这是 不是如何实际实施 。 特定于线程的值 存储在Thread对象本身 ;当线程终止时, 特定于线程的值可以被垃圾收集。
答案 0 :(得分:1)
问题是,如果是ThreadLocal
对象中的线程映射到值,那么值永远不会被垃圾收集,因为ThreadLocal
对象永远不会被销毁。
所以它基本上相反 - Thread
对象包含映射到其线程特定值的ThreadLocal
个键的映射。这样,一旦线程完成,就会收集完整的地图。
很少有其他优化,它实际上使用直接ThreadLocalMap
实现而不是实现Map
接口,使用增量哈希代码和类似的东西,但基本上概念如上所述。