据我了解,ThreadLocal 变量为每个线程维护一个单独的变量副本。这个维护了多个副本的变量本质上是一个共享变量。那么说一个变量值可以有多个副本是什么意思呢?如何保持一致性以使副本的值不会不同步?
最佳答案
你的说法This variable his 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();
}
关于java - 如何为声明为 ThreadLocal 的变量的多个副本保持一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727150/