如何为声明为ThreadLocal的变量的多个副本保持一致性?

时间:2013-05-24 03:14:29

标签: java multithreading thread-safety java.util.concurrent thread-local

据我所知,ThreadLocal变量为每个线程维护一个单独的变量副本。保持多个副本的此变量本质上是一个共享变量。那么说变量值可以有多个副本是什么意思呢?如何保持一致性,以使副本的值不会失去同步?

1 个答案:

答案 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();
}