threadlocal的弱引用什么时候生效?

问题描述 投票:0回答:1
public class BaseContext {

    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    public static Long getCurrentId() {
        return threadLocal.get();
    }

    public static void removeCurrentId() {
        threadLocal.remove();
    }


}

我创建了这样一个threadlocal实用程序类来存储用户的ID。每次收到http请求时我都会在拦截器中使用这个类。我查了文档,发现threadlocalmap中对threadlocal的弱引用是为了当外部对threadlocal的强引用消失时,GC回收threadlocal,使得entry中的key为空。带有空键的条目将在下一个 set、get 和remove 中被删除。

我的问题是,我的实用程序类似乎永远不会失去对 threadlocal 的强引用,因此弱引用似乎失去了意义。这样的弱引用机制在什么情况下起作用呢? threadlocal 是否在其他地方定义了?

java interceptor weak-references thread-local
1个回答
0
投票

ThreadLocal
使用
WeakReference
意味着它将被删除,尽管在使用此
ThreadLocal
的线程中存在引用。这也意味着在
Thread
死亡后,
ThreadLocal
中与其相关的任何值都将被 GC 处理。

© www.soinside.com 2019 - 2024. All rights reserved.