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

时间:2018-03-25 23:00:22

标签: java concurrency java-threads

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

enter image description here

方法Open()返回理发类中的布尔变量open的值。 barber类中的run方法将open变量设置为true,但main函数中的while循环不会停止。就像它看到barber.Open()永远是假的,尽管有变化。 这是理发师课程中的相关代码:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

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

private volatile boolean open;

您当前的问题很可能与Java内存模型中的Happens-Before关系有关。目前,您没有使用会产生必要内存障碍的任何指令。使用volatile,这只是获取它的方法之一,详细解释in this answer。如果您更喜欢深入阅读,请尝试使用Shipilev {/ 3}}。