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內部數組的索引的生成能夠看源代碼.

相關文章
相關標籤/搜索