Java threadlocal和volatile在概念上是相反的吗

Java threadlocal和volatile在概念上是相反的吗,java,volatile,thread-local,Java,Volatile,Thread Local,在Java中,ThreadLocal变量在概念上与volatile变量“相反”,这样说安全吗? 因为在前者中,每个线程只读取/更新变量的本地副本。但在后者中,每个线程都将始终看到主内存中变量的最新值……不可能看到过时的值。完全正确,但有一点扭曲 ThreadLocal变量是每个线程的不同变量 对于使用同一对象的每个线程,任何其他变量只存在一次,无论它是否易失 但是Volatile指定了某种线程读/写边界,因此它们必须与任何其他线程写入的最新值同步。但是,使用volatile不能确保线程安全

在Java中,ThreadLocal变量在概念上与volatile变量“相反”,这样说安全吗?
因为在前者中,每个线程只读取/更新变量的本地副本。但在后者中,每个线程都将始终看到主内存中变量的最新值……不可能看到过时的值。

完全正确,但有一点扭曲

  • ThreadLocal变量是每个线程的不同变量
  • 对于使用同一对象的每个线程,任何其他变量只存在一次,无论它是否易失
但是Volatile指定了某种线程读/写边界,因此它们必须与任何其他线程写入的最新值同步。但是,使用volatile不能确保线程安全

例如,递增易失性int的递增方法仍可能生成重复项。为了确保线程安全,您必须同步更新volatile属性的方法


查看此项了解更多详细信息:

我不这么认为。它们只是不同的概念。“概念对立”对我来说似乎太极端了。但是你对TL和volatile行为的描述似乎是准确的。你的描述似乎是准确的,但是如果我不知道线程局部变量和volatile是什么,我就不明白你在说什么。我真的希望你不是在教人们:别以为volatile变量通常是共享的,而线程局部变量通常是不共享的。为什么volatile不能确保线程安全?volatile的目的不是吗?@victor Read:@victor volatile保证可见性,但不保证原子性。