java ThreadLocal的对象怎么存储和获取

寻技术 JAVA编程 2023年09月05日 119

今天小编给大家分享一下java ThreadLocal的对象怎么存储和获取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1、ThreadLocal的set方法

    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }

通过ThreadLocal的set方法看出,ThreadLocalMap的<k,v>结构中,key存储的是ThreadLocal本身,而value则是实际存储的值,也就是说,在ThreadLocalMap里存储了当前ThreadLocal所复制的变量副本。

2、ThreadLocal本身不存储值,在使用中,ThreadLocal是作为一个key,从ThreadLocalMap获取值,从ThreadLocal的get方法中也可以看出来:

    public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
}
关闭

用微信“扫一扫”