尽管条件值发生变化,但循环不会停止

While loop not stopping despite condition value changing

我的 main() 函数中有以下代码行:

方法Open()returns理发师class中布尔变量open的值。 barber class 中的 运行 方法将 open 变量设置为 true 但 main 函数中的 while 循环不会停止。就好像 barber.Open() 永远是错误的,尽管发生了变化。 这是理发师中的相关代码 class :

open 字段声明为 volatile 以确保一个线程中的写入对另一个线程中的 reader 可见:

private volatile boolean open;

您当前的问题很可能与 Java 内存模型中的 Happens-Before 关系有关。目前您没有使用任何会生成必要内存屏障的指令。使用 volatile,这只是获取它的一种方法,Shipilev 详细解释了 in this answer. If you prefer a more in-depth read try Close Encounters of The Java Memory Model Kind