ThreadLocal是如何和各个Thread之间建立起关联的

本篇文章为大家展示了ThreadLocal是如何和各个Thread之间建立起关联的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目网站设计制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元蔡家坡做网站,已为上家服务,为蔡家坡各地企业和个人服务,联系电话:18980820575

我们来看 ThreadLocal 是如何和各个 Thread 之间建立起关联的呢?

我们来看,每个Thread,都有这样一个属性,一个ThreadLocal.ThreadLocalMap的属性,能互不影响的秘密都在这里。

/* ThreadLocal values pertaining to this thread. This map is maintained

     * by the ThreadLocal class. */

    ThreadLocal.ThreadLocalMap threadLocals = null;

这个ThreadLoalMap是什么时候被设置值的呢?

我们来看ThreadLocal的使用。

一般的用法是:

ThreadLocal local = new ThreadLocal() {

protected Integer initialValue() {

                    return 1;

                }

};

然后使用这个ThreadLocal变量进行set和get操作。

set的时候,会先判断对于当前线程,是否已经分配了map,没有则创建。

public void set(T value) {

        Thread t = Thread.currentThread();

        ThreadLocalMap map = getMap(t);

        if (map != null)

            map.set(this, value);

        else

            createMap(t, value);

    }

是否已经分配过map就是根据当前线程的 theThreadLocals 属性来判断的

ThreadLocalMap getMap(Thread t) {

    return t.threadLocals;

}

那createMap的时候,就会给当前线程的threadLocals赋值

void createMap(Thread t, T firstValue) {

    t.threadLocals= new ThreadLocalMap(this, firstValue);

}

这个ThreadLocalMap里是以数组的形式放的多个Entry。

在 get 的时候,如果没数据会根据上面的initValue方法创建一个新的返回。这样多个线程用的就是不同的东西了。

那这里还有一点,对于不同的东西, ThreadLocal 可以通过泛型做区分,当然你也能一股脑的放到一起,那取的时候就费劲了。

上述内容就是ThreadLocal是如何和各个Thread之间建立起关联的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


新闻标题:ThreadLocal是如何和各个Thread之间建立起关联的
当前网址:http://azwzsj.com/article/jspsep.html