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

标签 java thread-safety compiler-optimization

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

最佳答案

volatile 表示值永远是新鲜的;如果另一个线程在您之前将一个新对象放入变量中,您将看到该对象。

它不会改变值的行为;您无法神奇地使对象成为线程安全的。

关于java - volatile是否意味着它是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059266/

相关文章:

java - Spring 的 NumberFormat 线程安全

c# - 在 VB.NET、C# 等中,一点规则是否会自动优化到代码中?

java - 在 XSD 模式中编写 java.lang.Object

c++ - 在 C++11 中总是将 std::mutex 声明为可变的?

java - 系统找不到wildfly指定的路径

go - 将标准Golang映射转换为Sync.Map以避免出现竞争情况

c - 编译器如何处理错位?

c++ - 可以在 macOS 上启用的最低支持 SSE 标志是什么?

java - JColorChoose,相似颜色异常(exception)

java - Rijndael C# 和 Java 之间的差异