我的main()
函数中包含以下代码行:
方法Open()
返回理发类中的布尔变量open
的值。 barber类中的run方法将open
变量设置为true,但main函数中的while循环不会停止。就像它看到barber.Open()
永远是假的,尽管有变化。
这是理发师课程中的相关代码:
答案 0 :(得分:1)
将open
字段声明为volatile
,以确保一个线程中的写入对另一个线程中的读者可见:
private volatile boolean open;
您当前的问题很可能与Java内存模型中的Happens-Before关系有关。目前,您没有使用会产生必要内存障碍的任何指令。使用volatile
,这只是获取它的方法之一,详细解释in this answer。如果您更喜欢深入阅读,请尝试使用Shipilev {/ 3}}。