Mik*_*own 3 java concurrency multithreading thread-safety thread-synchronization
我感兴趣的是一个线程正在等待while循环中变量的变化:
while (myFlag == false) {
// do smth
}
Run Code Online (Sandbox Code Playgroud)
它重复无数次.
与此同时,另一个线程更改了此变量的值:
myFlag = true;
Run Code Online (Sandbox Code Playgroud)
如果此变量不是volatile,读者线程是否可以看到更改另一个线程中变量值的结果?一般来说,据我所知,它永远不会发生.还是我错了?然后在什么情况下,第一个线程可以看到变量的变化并退出循环?这可能不使用volatile关键字吗?在这种情况下,处理器缓存的大小是否起作用?
请解释并帮助我理解!先感谢您!!
如果此变量不是volatile,读者线程是否可以看到更改另一个线程中变量值的结果?
它可能是,是的.只是它不会明确地看到变化.
一般来说,据我所知,它永远不会发生.
不,事实并非如此.
您正在写一个变量,然后在另一个线程中读取它.您是否看到它将取决于所涉及的确切处理器和内存架构.如果不涉及任何内存障碍,您无法保证看到新的价值 - 但您肯定不会保证不会看到它.