java 之ThreadLocal

通过 ThreadLocal 能数据保存在一个线程中,而且不需要 lock 同步。理论上 ThreadLocal 可

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

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

器。


由ThreadLocal常用的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();

    }


 ThreadLocalMap getMap(Thread t) {

        return t.threadLocals;

    }


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

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


你可能感兴趣的:(java 之ThreadLocal)