我有一个简短的while循环一样:while循环停止检查if语句?
boolean a = false;
MyClass b = new MyClass();
b.b = false;
// b is used in other thread...
while(!a){
if(b.b){
throw new Exception("b is true");
}
}
在这种情况下a
永远不会成真,但一些运行后布尔变量b.b
应该成真。奇怪的是,while循环从未离开过,我的程序无限循环。
我woundered为什么决定到System.out.print
语句添加到循环:
while(!a){
if(b.b){
throw new Exception("b is true");
}
System.out.println("there is something more to execute");
}
值得注意的是我的代码就像是应该的。 while循环遍历if语句,直到b.b
为真,并抛出异常将退出循环。
难道是在第一种情况下,程序停止检查if语句,因为编译器认为它没有必要再次检查?如果没有,有人可以向我解释,为什么第一个案件不起作用,但第二个案件呢?
如何在线程之间同步b.b? – bowmore
如果b.b在你的if里面是真的,为什么不使用break或set a为真?针对预期的行为抛出异常并不是很好的设计。 –
也许向我们展示b如何在另一个线程中使用 –