这里假设value和threadlocal都是弱引用,假如threadlocal除了 被Entry这个弱引用所引用之外,还被强引用(使用threadLocal时threadLocal对象肯定是被强引用的,当不被使用时也就没被强引用这时候Gc可回收),但这时threadLocal.set(value),value的值没被其它对象引用,只是传递给thread,也就是value 这时只被Entry这个弱引用所引用,这时候发生gc,threadlocal不会被回收,value回被回收 ,导致通过threadlocal获得value值时获得为Null。
import java.lang.ref.WeakReference;
public class WeakRefExample {
public static void main(String[] args) {
Object referent = new Object();
WeakReference weakRerference = new WeakReference<>(referent);
System.out.println(weakRerference.get()); // 输出:java.lang.Object@1540e19d (或者其他hashcode)
referent = null; // 移除唯一的强引用
System.gc(); // 通知JVM进行垃圾回收
// 如果对象被回收,则弱引用返回null
System.out.println(weakRerference.get()); // 输出:null
}
}