WeakRefExample

这里假设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
}

}

你可能感兴趣的:(java)