java - 在 java4 和 java5 中使用 volatile 关键字

标签 java

在 java4 和 java5 之后使用 volatile 关键字 有什么区别?

与此相关的是,

Read/write operations on non-atomic variables(long/double) are atomic when they are declared as volatile.

对于 java4 也是这样还是它从 java5 开始有效???

最佳答案

是的,有区别。
直到 Java 4 volatile 可以由编译器根据之前的任何读取或写入重新排序,从而导致细微的并发错误,例如使得无法实现 double check 锁定(Singleton 的非常常见的习惯用法)。
这在 Java 5.0 中得到修复,它扩展了 volatile 的语义,它不能再针对任何后续读取或写入重新排序,并引入了新的内存模型。你可以阅读这个Double Checked Locking例如引用

关于java - 在 java4 和 java5 中使用 volatile 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10336006/

相关文章:

从 request.getInputStream() 读取字符时出现 java.io.IOException : Stream closed or Underlying input stream returned zero bytes,

java - 使用 add 限制 ArrayList 的大小

java - 如何自动更改 WebStart 程序的 Java 缓存文件夹

java - Android - 动态gridview(多列绑定(bind)行)

java - Android SDK 管理器启动问题?

java - Repaint() 只工作了一半

java - 如何在不扩展 JFrame 的情况下设置窗口大小?

java - Jersey 2.0 : Create repeating job

java - tomcat 中的两个 war 文件与每个 tomcat 中的每个 war 文件 - 性能比较

java - 如何在我的 jsp 页面中以弹出警报的形式显示错误消息