一般理解可能说在ThreadLocal内存储一个Map,Map的key是Thread,value是对象,但其实不是这样。
实际上是这样,在Thread内部有一个ThreadLocalMap,这个Map的key是ThreadLocal,value是对象。
这样的设计使得ThreadLocal只充当一个代理类,和线程相关的数据都存储在Thread内部。第二个原因是不容易内存泄漏,因为ThreadLocal生命周期一般比线程长,一旦没有remove操作,则Thread引用一直会在ThreadLocal内,导致Thread不会被回收,造成内存泄漏。
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2776