2015-08-24 32 views
-8

因此,在我的研究中,我發現使用計時器執行指令並執行指令,然後使線程進入休眠狀態的主要區別。Thread.sleep與定時器

遵守以下代碼

public class StkFlow { 
    public void event(ActionEvent e){ 
     //do some stuff 
    } 

    public static void main (String [] args){ 
     Timer tick=new Timer (200, event); 
     tick.start(); 
    } 
} 

AND

public class StkFlow { 
    public static void main (String[] args){ 
    while (/*Condition*/){ 
     //Do some stuff 
     Thread.sleep (200); 
    } 
} 

代碼的第一片使用一個計時器,並執行一些代碼每200ms和第二片的代碼執行一些代碼,並把該線程睡200ms。不同之處在於計時器已經爲你迭代了,並且不像Thread.sleep那樣暫停線程,停止所有的處理,(這裏的主題是計時器),那麼如果你有一個循環在裏面呢,如果這個循環比較相同的對象?它會不斷創建一個這個循環的新實例嗎?如果它確實做了最終結果,比方說,如果它正在處理該循環中的一些重型指令?

E.G

public class StkFlow { 
    public void event(ActionEvent e){ 
     while (0==0){ 
      //do some heavy duty stuff 
     } 
    } 

    public static void main (String [] args){ 
     Timer tick=new Timer (200, event); 
     tick.start(); 
    } 
} 
+0

我想知道這個代碼是如何與Java相關的... – Tom

+1

區別在於sleep()阻止線程執行任何操作。例如,如果您是從swing事件派發線程完成此操作,那麼UI將完全無響應並被凍結。關於時間如何處理長時間任務,請閱讀javadoc。這就是它的目的。 –

+0

我沒問過它是什麼,這個問題清楚地陳述在底部 –

回答

0

的Thread.sleep其停止所有處理,所以如果你有裏面一個循環,如果這個循環是比較相同的對象是什麼?它會不斷創建一個這個循環的新實例嗎?如果它確實做了最終結果,比方說,如果它正在處理該循環中的一些重型指令?

不,它不會,你需要start()一個新的線程。 Thread.sleep()會停止當前線程,但是如果您在自己的線程中運行它,那麼它不會停止主線程和每個可能在其自己的線程中運行的任務,而是可以在時間點之後啓動它們。

+0

我正在談論計時器真的 –

+0

但我在談論你的問題。 –

+0

你喜歡...閱讀問題的最底部 –

相關問題