2013-12-12 252 views
1

我一直在試圖找到「執行」只被打印一次的原因。但是在我實際閱讀的書中找不到答案,Java Threads或者使用Google搜索。在終止狀態線程上運行()

public void init(){ 
    t = new Thread(new Runnable() { 

     @Override 
     public void run() { 
      System.out.println("executed"); 
     } 
    }); 
    t.start(); 
    while(true){ 
     if(!t.isAlive()) 
      t.run(); 
    } 
} 

回答

4

望着JDK的源代碼,這裏有Thread.run()定義:

public void run() { 
    if (target != null) { 
     target.run(); 
    } 
} 

當你啓動與Runnable線程它被設置爲target。但是,當線程運行完畢後,系統會調用exit()就可以了,其中,除其他事項外,不:

target = null; 

所以一個"executed"你看到的是從Thread本身;當你在線程上調用run()時,target已被取消,run()什麼也不做。

+0

那麼我該如何實現它才能在線程第一次執行run方法後執行多次運行? – Nicolas

+0

@尼古拉斯因爲你在你的榜樣中做廢話,很難說。我不明白你想要達到什麼目的。您是否想在並行線程中執行'run'並在其他主線程中執行其他時間?順便說一句,有'thread.join()'方法等待另一個線程終止。在繁忙等待中使用'isAlive()'不能在生產代碼中使用。 – Val

+0

@Val我只是想了解線程是如何工作的。我剛剛開始處理主題 – Nicolas