2014-06-23 67 views
1

我們有一個桌面應用程序,它具有一些後臺線程,並且由於執行外部命令,還需要線程來處理out和err流。新線程與重用線程

我們可以創建新線程並讓它們完成或者我們可以重用線程。重用線程會有一些好處,例如在性能或內存使用的情況下?

+2

定義「重用」的線程。一個線程只能啓動一次。 – TheLostMind

+5

使用線程池。 – UmNyobe

+0

線程共享類的重用線程。線程池是很好的選擇。 –

回答

2

沒有辦法重用Thread因爲Thread一旦完成(退出run()法)及其Thread.State通行證從Thread.State.RUNNABLEThread.State.TERMINATED和線程類沒有設置其狀態重用它setState(Thread.State)方法。

但是我們可以幫助Java中的線程池。在線程池的情況下,創建一組固定大小的線程。線程池中的線程被拉出並由服務提供商分配作業。作業完成後,線程再次包含在線程池中。

利用線程池的:

  1. 線程池保存虛擬機的每一個短命的任務,創造全新的線程的工作。
  2. 它最大限度地減少了與啓動線程並清理後死機相關的開銷
  3. 通過創建線程池,池中的單個線程可以反覆回收用於不同的任務。
  4. 減少響應時間,因爲一個線程已建成和開工,只是在等待它的下一個任務
0

重用線程具有以下優勢:

  • 沒有新對象需要創建(Thread對象)
  • 更低的延遲,因爲任務可以由現有的空閒線程
  • 沒有被拾起舊對象需要垃圾回收
  • 使用池還引入了對併發運行線程的限制(平均出負載峯值)
+0

正在創建一個線程對象,比創建一個普通對象貴得多嗎? –

+0

如果通過普通對象表示「new Object()」,那麼是 - 只要看看Thread類的構造函數,以獲得創建新線程時發生的事情的印象 –