1

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

4

1 回答 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 回答