ThreadLocal的 key 是弱引用,那么在 ThreadLocal.get()的时候,发生GC之后,key 是否为null?
时间: 2023-10-17 11:32:40 浏览: 291
浅谈Java引用和Threadlocal的那些事
在 ThreadLocal 中,key 是使用弱引用(WeakReference)来持有线程特定的值的。当发生垃圾回收时,如果 key 对应的线程已经被回收,那么 key 会被置为 null。
在 ThreadLocal 的 get() 方法中,会先获取当前线程的 ThreadLocalMap,并通过 key 来获取对应的值。如果 key 为 null,那么 get() 方法会返回 null,表示当前线程没有设置过与该 ThreadLocal 相关联的值。
需要注意的是,垃圾回收只会在 JVM 空闲或内存紧张时才会触发,而且不同的 JVM 实现可能有不同的垃圾回收策略。因此,并不是每次发生 GC 时都会导致 key 被置为 null。但是,当发生 GC 且线程被回收时,key 会被置为 null。
阅读全文