ThreadLocal分析与使用

ThreadLocal是Java提供的用来存储线程独立的数据,那当我们使用这个类时,他的数据存在哪里了呢,请看下面的代码

 private void threadLocalDemo(){
        ThreadLocal<String> stringThreadLocal = new ThreadLocal<>();
        stringThreadLocal.set("测试");
        String a = stringThreadLocal.get();
    }

在上述代码中我们创建了一个ThreadLocal对象,并且调用了他的set方法,保存了一个String数据,接着我们看下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);
    }

通过set方法我们知道,ThreadLocal对象把当前Thread做为key获取了一个叫做ThreadLocalMap的对象,然后把数据存在了这个Map的数组中了,所以当我们在使用ThreadLocal保存数据时,保存数据的Map应该和当前线程有关,接着我们看下getMap方法

  ThreadLocalMap getMap(Thread t) {
        return t.threadLocals;
    }

这个方法很简单,直接通过thread.threadlocals返回了,所以我们通过ThreadLocal保存的数据应该是保存到了当前线程的成员变量中了。其中Thread、ThreadLocalMap和ThreadLocal的关系如下,


ThreadLocal.jpg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容