2013-05-31 283 views

回答

6

是的,但不能返回任何值,因爲runvoid類型。

使用返回,結束線程

public void run() 
{ 
    while(true) 
    { 
      return; 
      // This is fine, and will stop the thread. 
    } 
} 
+2

在這種情況下,讓OP通過反覆試驗來學習會更好:)。 –

1

它將停止執行,如果那裏有給Thread對象的任何其它引用它最終會被垃圾收集。

2

如果您在可運行的語句中放入return語句,線程就會死亡,而且不會再發生任何事情。

如果你需要做的是這樣返回線程完成後的值,看看Callable

它可以返回當一個線程結束時返回未來的對象。

+0

海報問是否線程終止。由於'System.exit(...)'顯然是一個不同的野獸,所以請注意「退出」一詞。 – Gray

3

是的。

當你從run()方法返回時,線程就會死掉 - 但對象會一直存在,直到它變得無法訪問。

查看此article有關線程的生命週期。

另請參閱this相關問題。

2

這取決於。

如果使用該Runnable創建並啓動了一個Thread,則返回語句將導致該線程的終止。它不會立即終止線程。例如,任何封閉的finally塊仍然被執行。

new Thread(myRunnable).start() 

但是,在其他情況下,Runnable中的return語句不會導致當前線程終止。

例如,您也可以直接調用Runnable。幸運的是,run()方法的返回不會終止調用者的線程。

myRunnable.run(); 

你可以把一個Runnable成的ThreadPoolExecutor,它在單個線程可能運行多個的Runnable。這些Runnable中的Return語句不會導致重用線程的終止。

executorService.submit(myRunnable); 
executorService.submit(myOtherRunnable); 
+0

返回確實使線程死於'Thread'上下文中。顯然還有其他的代碼在'Thread'內部運行,但是在問題範圍上卻並沒有誤導。重寫'Thread.run()'和'if(target!= null)target.run()'方法之間的區別非常微妙。 – Gray

+0

@格雷 - 澄清的第一段。另外,考慮一個try/finally包含的回報。無論如何,在return語句之後,線程繼續執行finally塊。 –

+0

不知道爲什麼有人在上面編輯之後低估了這一點。 –

相關問題