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

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

据我了解,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/

相关文章:

java - 模式匹配 : Matching a String with a pattern

c++ - 设计 C++ 休息客户端

c# - 如何使用后台 worker 将参数(字符串)发送到 UI 线程?

c++ - 将数据从一个线程传递到另一个线程的最快方法

java - 在java中非同步读取整数线程安全吗?

java - 如何使用 Apache Tika 从 .wps 文件中提取文本?

java - 如何使用 spring spEL 将 servlet 上下文路径注入(inject)到 bean 属性?

java - Vaadin BeanFieldGroup - 绑定(bind)嵌套属性时为 "Property is not cascaded"

c# - 队列的线程安全处理

c# - 多个线程读取静态对象是否安全?