2011-11-18 117 views
5

考慮這個類,AnimationThread爲什麼run()只會被調用一次?

class AnimationThread implements Runnable { 
    public void pause() { 
     doAnimation = false; 
    } 

    public void doStart(){ 
     doAnimation = true; 
    } 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     if (doAnimation) { 
      //my code 
     } 

     try { 
      Thread.sleep(500); 
     } 
     catch (InterruptedException e) { 

     } 
    } 
} 

現在我開始這個線程在活動onCreate(只顯示粗略的代碼):

AnimationThread animRunnable = new AnimationThread(); 
animationThread = new Thread(animRunnable); 
animationThread.start(); 

run()獲取調用只需一次(我追查一個日誌來確認)。我只想知道,當我開始線程時,爲什麼run()沒有被500次睡眠重複調用。它只被調用一次。

回答

12

也就是說它是如何應該是。

甲線程中運行,通過執行它的運行方法(僅一次)。之後,它被認爲是完成/死亡/完成/完成。

如果要循環,你必須自己做(run方法內部),或使用一些ExecutorService的重複調用了Runnable。

+0

謝謝。我明白了邏輯。我在確保內部運行我的邏輯代碼反覆運行。其實在我的情況,我想運行()爲我的目的infinetly執行,所以我必須封閉內運行,而(真)內我的邏輯和動畫的發生基於doAnimation狀態變量的狀態。謝謝。 –

+0

這是一種常見的模式。但是,您可能希望線程最終終止以關閉程序。或者你可以使用一個守護進程線程。 – Thilo

0

run()是由任何Thread僅執行一次的方法。因爲完成後run method線程爲dead or completed
因此,對於一個線程運行將只執行一個。如果你不想殺死線程,那麼你必須確保運行完成...

相關問題