尽管条件值发生变化,但循环不会停止
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。
我的 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。