volatile是否意味着它是线程安全的

Gau*_*rav 1 java thread-safety compiler-optimization

在Java中,当我们想要确保编译器不应该通过保留变量的本地副本来进行优化时,我们将变量设置为volatile.将变量用作volatile可确保线程不使用变量的本地副本,但它们将使用存储在主存储器中的变量.但是,这是否意味着volatile变量是线程安全的?另外,在原始类型的情况下,如果我们使用用户定义的对象,它有何不同?

SLa*_*aks 9

volatile意味着价值永远是新鲜的; 如果另一个线程在您之前将新对象放入变量,您将看到该对象.

它不会改变值的行为; 你不能神奇地使对象线程安全.