对ThreadLocal的一些理解

2020-08-13  本文已影响0人  溪水散人

ThreadLocal,这个东西真的是熟悉又陌生,原因是面试的时候好像经常会被问到,但是实际使用的时候却用的比较少。

对于其源码,很多博客到处都是,就不在贴在这里,免去抄来抄去的嫌疑。

在并发编程的环境下,如果存在共享数据,为了保证这些数据的一致性,我们需要通过各种操作来保证共享数据的一致性,如通过加锁的方式,无论是那种方式都好,其目的都是为了对共享数据操作的原子性。

而ThreadLocal取反其道行之,对于一个共享变量,每个使用它的线程,都为其分配一个副本,即保证了每个线程用到的这个共享变量都是不一样的,即t1线程不会用到t2线程修改后的共享变量的值。

还是贴一点源码

    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();
    }
上一篇 下一篇

猜你喜欢

热点阅读