据我了解 ThreadLocal 变量为每个线程维护一个单独的变量副本。这个维护多个副本的变量本质上是一个共享变量。那么变量值可以有多个副本是什么意思呢?如何保持一致性以使副本的值不会不同步?
问问题
119 次
1 回答
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();
}
于 2013-05-24T03:24:37.100 回答