new Thread(){
public void run(){
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(hasData < 100){
progressStatus = progressStatus + (int)(Math.random() * 10);
handler.sendEmptyMessage(0x123);
// if(hasData >= 100){
// Toast.makeText(MainActivity.this,"耗時任務已完成",1).show();
// }
}
}
}.start();
}
備注progressStatus和handler已經在上面聲明了。
while(hasData < 100){
progressStatus = progressStatus + (int)(Math.random() * 10);
handler.sendEmptyMessage(0x123);
// if(hasData >= 100){
// Toast.makeText(MainActivity.this,"耗時任務已完成",1).show();
// }
}
從這塊代碼分析可知,有幾種情況:
1.如果原先 hasData >= 100的話,根本就不會進入到這個while循環中,那麼就不會執行if
2.如果原先hasData < 100 , 那麼會進入到while中,但是while中沒有改變hasData值的方法,那麼只會在while中死循環,永遠不會執行if
3.如果原先hasData < 100,那麼會進入到while中,而且通過handler.sendEmptyMessage(0x123);發送的請求,會改變hasData的值,但是,由於handler的執行相比當前thread是異步的,其觸發時機會存在不確定性,所以不知道hasData的值會是在while判斷前改變還是在if判斷錢改變,所以也會導致if裡面的內容不起作用