标签:
通过 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内部数组的索引的生成可以看源代码.
标签:
原文地址:http://my.oschina.net/doctor2014/blog/396162