java - jvm 是否保证在切换线程后更新处理器缓存?

标签 java multithreading

面试官问我,如果我们确定线程永远不会干扰,不使用 volatile 是否有任何危险。

例如。我们有:

int i = 10; 
// Thread 1 
i++; 
// await some time and switch to Thread 2
getI();

我不使用任何同步。
我们是否有任何危险通过第二个线程接收 i 的过时值?

最佳答案

如果没有 volatilesynchronized 或读/写屏障,则无法保证另一个线程会看到您所做的更改,无论您等待多长时间。特别是 boolean 字段可以内联到代码中,实际上不执行读取。理论上,如果 JVM 检测到该字段未被线程更改,则可以内联 int 值(但我不相信它实际上会更改)

we know for sure that threads will never interfere.

这不是你能知道的,除非你执行更新时读取线程没有运行。当线程启动时,它会看到在它启动之前发生的任何更改。

关于java - jvm 是否保证在切换线程后更新处理器缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365114/

相关文章:

c# - SqlConnection支持多少个并发语句

c++ - 如何确定 Win32 线程是否已终止?

java - 如何在storm中创建拓扑

java - 使用 Android Studio 创建自定义 View

Java System.getProperty( "user.timezone") 不起作用

java - 运行 android 应用程序错误(致命异常 : main Process: PID: 14099)

android - 线程错误

java - JTable 中的换行、右对齐、自动调整行高

java - Java 中的多线程观察者 - 保持正确的顺序

java - Java 中的资源分配器