2013-07-31 181 views
0

執行while循環時,java會不斷檢查參數是否爲真?例如,如果一個while循環是while循環是否會停止執行?

while(k=7) { 
    Thread.sleep(5000); 
} 

但5秒另一個線程的變化k到8中,將循環繼續等待立即或退出?

+4

你正在使用'='的'而不是'==。錯字可能是。其次,'k'是一個實例變量嗎? –

+0

'k'是什麼?您已經遺漏了與之相關的代碼... –

+0

每一行都會執行它所說的內容並且不再執行任何操作。它不知道在其他情況下可能會做些什麼。當它睡着時,它就是這樣做的。順便說一句,如果它立即停止,設置睡眠時間的重點是什麼? –

回答

6

不,它只會在執行路徑需要它那裏檢查。因此,它將在您的示例中每5秒檢查一次。

如果您想立即得到通知,你將不得不使用的wait(),通知(),或一些其它的同步方法。

下面是一個example

2

該條件在開始檢查一次,如果所述主體的在每次迭代執行之後被輸入環路,一旦。所以不,它不會立即退出,即使k在身體被執行時被改變。

哦,你的意思可能是k == 7(回想一下==比較,而=指定)。有些人甚至會寫7 == k以避免可能犯這個錯誤。

這並不真的有很多工作要做線程。例如,考慮:

int k = 7; 
while (k == 7) { 
    k = 8; 
    System.out.println("here!"); 
} 
 
here! 

注意身體如何仍是完全即使k執行被立即改變爲一個值,不再滿足循環條件。

5

不會。即使k是易失性的(或者更糟糕的是,從另一個線程改變而沒有將其變爲易失性;壞主意),或者其屬性可能通過循環內部調用的方法更改的對象,它將僅在循環體的結尾,決定重複身體或繼續循環。

您可以通過中斷線程,並具有循環外抓跳出循環,或進行內部檢查和break