ThreadLocal的弱引用,强引用是什么,为什么ThreadLocal就必定会被回收,而ThreadLocal又作为Map中的key,ThreadLocal被回收会导致一个key为null的entry
时间: 2023-11-13 21:55:21 浏览: 93
Java对象的强、软、弱和虚引用
4星 · 用户满意度95%
强引用是指在程序中直接引用一个对象,只要该对象有强引用与之关联,垃圾回收器就不会回收该对象。而弱引用是指一种比较弱的引用,当垃圾回收器扫描到只有弱引用与之关联的对象时,就会将其回收。
ThreadLocalMap中的key是ThreadLocal对象,而ThreadLocal对象是一个弱引用,当ThreadLocal对象没有被其他强引用关联时,垃圾回收器就会将其回收。如果ThreadLocal被回收了,那么对应的value也就没有意义了,因此需要将其清除。
当ThreadLocal被回收后,对应的entry并不会立即被清除,而是等到下一次ThreadLocalMap调用set、get、remove等方法时再进行清除。这时候,如果entry的key为null,就说明对应的ThreadLocal已经被回收了,需要将该entry清除。
阅读全文