想法的產生
在寫“別踩白塊”的課設中,在遊戲結束後彈出的Dialog對話框中個,設置了一個重新開始遊戲的按鈕,在註冊監聽是發現需要啓動的是一個原來啓動過但是已經完成工作的一個線程(即是一個“死亡”的線程)。希望通過線程名重啓該線程,實現重新開始的功能。如下代碼所示:
Thread thread = new Thread(){
public void run(){
while(flag){
game.down(frame.mBolk);
game.creatBlackBolk(frame.mBolk);
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
delay();
}
}
};
thread.start();
當線程執行完成“死亡”後,我希望通過如下代碼重啓該線程(線程名在Game類中設置成靜態了,上面代碼沒有體現只是太麻煩,所以就放一塊了):
Game.thread.start();
結果
很明顯,這是不可能實現的,所以我華麗麗的over了,最後還傻傻地去找原因。
原因
在線程的生命週期中,是沒有死亡後重啓這個概念的,當一個線程幹完了自己該乾的事情後就死了,就永遠地消失了,不管通過什麼方法,都無法重新喚醒,所以此處唯一的解決辦法就是重新new一個線程出來。
反思
通過這個簡單小問題,暴露出了很大的問題:線程的學習不夠過關,且對線程的生命週期的理解還不夠透徹。線程這一章感覺難度係數比較大,特別是後面的線程通信和線程調度。在今後的學習中增加精力和時間去學習線程這一部分,我感覺是非常有必要的。相信自已一定會學好的。