一、key是弱引用,gc垃圾回收時會影響ThreadLocal正常工作嗎
????????到這里,有些小伙伴可能有疑問,
ThreadLocalMap
的key既然是?弱引用,那么GC時會不會貿然地把key
回收掉,進而影響ThreadLocal
的正常使用呢?答案是不會影響ThreadLocal的正常工作的。原因如下,雖然ThreadLocalMap的Entry的key是一個弱引用(key為ThreadLocal),但是棧中還有ThreadLocal ref在引用著ThreadLocal,如下所示:
?
二、代碼證明
/*** @Author : 一葉浮萍歸大海* @Date: 2023/11/22 14:36* @Description: 證明gc時不會回收ThreadLocalMap的弱引用(除非手動將變量設置為null)*/
public class ThreadLocalWeaknessMainApp {public static void main(String[] args) {Object obj = new Object();WeakReference<Object> weakReference = new WeakReference<>(obj);System.out.println("GC回收之前:" + weakReference.get());System.gc();System.out.println("GC回收之后:" + weakReference.get());obj = null;System.gc();System.out.println("對象設置為null,GC回收之后:" + weakReference.get());}}