【发布时间】:2019-11-15 10:46:06
【问题描述】:
我正在等待一个布尔值随着 while 循环而改变,但 while 循环永远不会结束?我可能对此有点愚蠢
行之有效的代码。但是while循环永远不会结束,当布尔值改变时我的代码不会被执行:
while(!myCoolBoolean);
//my code when the boolean has changed to true
这有点奇怪,因为当我这样做时它会起作用:
while(!myCoolBoolean) {
System.out.print();
}
//my code again
有什么帮助吗? 编辑:while 循环实际上是在一个线程中,而 myCoolBoolean 正在另一个线程中被更改
【问题讨论】:
-
myCoolBoolean应该在哪里改变?请edit您的问题并添加minimal reproducible example,因为您现在发布的内容应该永远不会结束... -
您正在使用 while 循环阻塞整个过程。
System.out.print();给处理器一些时间来执行其他线程(然后显然会更新变量)。 -
也相关 - stackoverflow.com/questions/9459657/… - 它表明虽然不能保证,但
System.out.print的实现通常在内部同步。它可以因此导致来自其他线程的更改变得可见。
标签: java multithreading