ThreadLocal是什么、有什么、能做什么?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_30813789/article/details/82492859

ThreadLocal提供一个线程(Thread)局部变量,访问到某个变量的每一个线程都拥有自己的局部变量。说白了,ThreadLocal就是想在多线程环境下去保证成员变量的安全。

ThreadLocal提供的方法

对于ThreadLocal而言,常用的方法,就是get/set/initialValue方法。

我们先来看一个例子

对于ThreadLocal而言,常用的方法,就是get/set/remove/initialValue方法。

我们直接看最常用的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);
    }
    ThreadLocalMap getMap(Thread t) {
        return t.threadLocals;
    }
    void createMap(Thread t, T firstValue) {
        t.threadLocals = new ThreadLocalMap(this, firstValue);
    }

你会看到,set需要首先获得当前线程对象Thread;

然后取出当前线程对象的成员变量ThreadLocalMap;

如果ThreadLocalMap存在,那么进行KEY/VALUE设置,KEY就是ThreadLocal;

如果ThreadLocalMap没有,那么创建一个;

说白了,当前线程中存在一个Map变量,KEY是ThreadLocal,VALUE是你设置的值。

猜你喜欢

转载自blog.csdn.net/baidu_30813789/article/details/82492859