java - Volatile 变量在这里有意义吗(多核处理器)?

标签 java volatile

我将实例变量声明为 voltile。假设多核下的两个处理器创建两个线程,其中线程更新变量。确保 瞬时可见性,我相信在这里将变量声明为 volatile 是正确的选择,以便线程完成的更新发生在主内存中并且对另一个线程可见。 对吗?

这里的目的是理解多核处理器方面的概念。

最佳答案

我假设您正在考虑使用 volatile 与不使用任何特殊的并发规定(例如synchronizedAtomicReference)。

无论您运行的是单代码还是多核,都无关紧要:如果没有 volatile ,线程之间共享数据绝不是安全的。没有它,运行时还可以做更多的事情;基本上它可以假装访问线程是 JVM 上运行的唯一线程。线程可以读取该值一次并将其永久存储在调用堆栈中;读取该值但从不写入该值的循环可以进行转换,以便该值在开始时仅读取一次并且不再重新考虑,依此类推。

所以消息很简单:使用 volatile - 但这不一定是您在并发代码中需要处理的全部

关于java - Volatile 变量在这里有意义吗(多核处理器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26756954/

相关文章:

java - 如何使 Jpanel 的所有区域可拖动,包括其中的 JSVGCanvas

java - JTextArea 在 SwingWorker 中打印时不会自动滚动

java - android - 从 Activity View 中调用方法

java - Java新内存模型中的happens-before是否也适用于声明为 volatile 的对象的成员?

c++ - 如果 volatile 是不必要的,为什么 std::atomic 方法提供 volatile 重载?

java - Spring Controller 重写@ModelAttribute 请求参数映射

java - 二叉搜索树的特殊情况

java - 将反射保留 java 中 volatile 的语义

c# - 锁定部分是否始终保证线程安全?

比较 volatile 数组和非 volatile 数组