据我所知,ThreadLocal变量为每个线程维护一个单独的变量副本。保持多个副本的此变量本质上是一个共享变量。那么说变量值可以有多个副本是什么意思呢?如何保持一致性,以使副本的值不会失去同步?
答案 0 :(得分:6)
您的陈述This variable whose multiple copies are maintained is essentially a shared variable
完全错误。
ThreadLocal已设置为从不共享变量。根本不需要同步它。找到本地线程的源代码,你会看到....从GrepCode我们可以看到每个线程有一个单独的实例:
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null)
return (T)e.value;
}
return setInitialValue();
}