java 之ThreadLocal

经过 ThreadLocal 能数据保存在一个线程中,并且不须要 lock 同步。理论上 ThreadLocal 可数组

以让一个变量在每一个线程都有一个副本。 ThreadLocal 经常使用来屏蔽线程的私有变量,例如“并this

发事务”或者其余的资源。并且,它还被用来维护每一个线程的计数器,统计,或者 ID 生成spa

器。线程


由ThreadLocal经常使用的get方法定义看:索引

  public T get() {事务

        Thread t = Thread.currentThread();资源

        ThreadLocalMap map = getMap(t);get

        if (map != null) {同步

            ThreadLocalMap.Entry e = map.getEntry(this);it

            if (e != null) {

                @SuppressWarnings("unchecked")

                T result = (T)e.value;

                return result;

            }

        }

        return setInitialValue();

    }


 ThreadLocalMap getMap(Thread t) {

        return t.threadLocals;

    }


能够知道,每一个Thread内部都有一个ThreadLocal.ThreadLocalMap threadLocals;这个map的维护是由ThreadLocal表现.并且它的初始化是lazily.

每一个ThreadLocal当前的nextHashCode的生成,以及它在ThreadLocalMap内部数组的索引的生成能够看源代码.

相关文章
相关标签/搜索