我有一個簡短的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如何在另一個線程中使用 –