美文网首页
ThreadLocal原理和实现线程安全数据共享

ThreadLocal原理和实现线程安全数据共享

作者: 搞好关系 | 来源:发表于2019-06-01 22:27 被阅读0次

    怎么分析呢?我们就直接先以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();
        }
    

    从此处我们可以简单看出是采用类似Map的方式,采用Key-Value方式实现数据的存储的,而Key则是当前的线程
    我们来看一下setInitialValue

     private T setInitialValue() {
            T value = initialValue();
            Thread t = Thread.currentThread();
            ThreadLocalMap map = getMap(t);
            if (map != null)
                map.set(this, value);
            else
                createMap(t, value);
            return value;
        }
    

    map.set(this, value)中我们看出的确是采用Map存储方式,
    接着我们看一下怎么创建的Map

    void createMap(Thread t, T firstValue) {
            t.threadLocals = new ThreadLocalMap(this, firstValue);
        }
    

    至此我们看到内部采用的是一个ThreadLocalMap作为数据存储容器,Thread作为Key来实现数据的共享存储,从而实现当前数据多线程共享(至于ThreadLocalMap内部我们不去深究)

    相关文章

      网友评论

          本文标题:ThreadLocal原理和实现线程安全数据共享

          本文链接:https://www.haomeiwen.com/subject/vrsztctx.html