我对 一个线程正在等待 while
循环中的变量变化的情况感兴趣:
while (myFlag == false) {
// do smth
}
它重复了无数次。
同时,另一个线程改变了这个变量的值:
myFlag = true;
如果这个变量不是易变的,读者线程能否看到在另一个线程中更改变量值的结果?一般来说,据我所知,它永远不会发生。还是我错了?那么什么时候、什么情况下,第一个线程才能看到变量的变化而退出循环呢?这可能不使用 volatile
关键字吗?处理器缓存的大小在这种情况下是否起作用?
请解释并帮助我理解!提前致谢!!
最佳答案
Can the reader-thread see the result of changing the value of the variable in the other thread if this variable is NOT volatile?
它可能能够,是的。只是它肯定不会看到变化。
In general, as I understand it will never happen.
不,不是这样的。
您正在写入一个变量,然后在另一个线程中从中读取。您是否看到它取决于所涉及的确切处理器和内存架构。在不涉及任何内存障碍的情况下,您不能保证看到新值 - 但您当然也不能保证不会看到它。
关于java - 通过不同线程同时读取和更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104146/