在過去幾個小時內我正在閱讀它,而且根本看不到任何理由(有效的原因)在ExecutorService
上調用shutdown()
,除非我們有一個龐大的應用程序存儲,幾十種和幾十種不同的執行者服務,這些服務很長一段時間都沒有使用過。在ExecutorService上調用shutdown()的原因
關機的唯一事情就是做一個正常的線程完成的工作。當正常線程完成Runnable(或Callable)的運行方法時,它將被傳遞給垃圾收集器以進行收集。使用Executor服務時,線程將被暫時擱置,不會爲垃圾收集打勾。爲此,需要關閉。
好的回到我的問題。是否有任何理由經常在ExecutorService
上調用shutdown,或者在提交給它一些任務後立即調用shutdown?我想留下一個人正在做的事情,並在此之後立即致電awaitTermination()
,因爲這是經過驗證的。一旦我們這樣做,我們必須重新創建一個新的ExecutorService
,以做同樣的事情。 ExecutorService
是不是重新使用線程的想法?那麼爲什麼要儘快銷燬ExecutorService
?
是不是一個合理的方式來簡單地創建ExecutorService
(或對夫婦取決於你需要多少),然後在應用程序運行期間將任務傳遞給他們,然後在應用程序出口或其他應用程序重要的階段會關閉這些執行者?
我想回答一些有經驗的編程人員,他們使用ExecutorServices編寫大量異步代碼。
第二方面的問題,比較小的處理android平臺。如果你們中的一些人會說,每次關閉執行程序並不是最好的想法,並且你在android上編程,你能告訴我如何處理這些關閉(具體 - 當你執行它們時),當我們處理不同的事件時應用生命週期。
由於CommonsWare的評論,我將帖子置於中性。我真的沒有興趣爭論死亡,它似乎在那裏領先。如果他們願意分享他們的經驗,我只想了解我從有經驗的開發人員那裏詢問的內容。謝謝。
「我看到很多次示例代碼,其中所有的時間,在提交或執行任務後都有shutdown()調用」 - 隨意使用超鏈接提供您的主張的證據。就我個人而言,我從來沒有見過任何符合您所述的「示例代碼」。你可能誤解了某些東西,如果我們知道你正在檢查的是什麼「示例代碼」,我們只能指出這一點。 – CommonsWare 2013-04-20 17:49:01
嗨CommonsWare。首先,我看到了你的一個激進的語氣(或者看起來)對我來說,我認爲這在這裏沒有得到驗證。我並沒有試圖以負面的方式來描繪人們。至於你的引用,我主要討論Thinking In Java IV,多任務部分。你可以在Bruce Eckel的例子中找到許多這樣的例子。他們大多是簡單的,但布魯斯給我的印象從來就不是經常使用關機。無論如何,你只關注那些不屬於我文章主要部分的內容。我刪除了這些部分,因爲我真的不想爭論它。 – Lucas 2013-04-20 20:13:30
hay @CommonsWare在Thinking in java中的書由Bruce Eckel在併發/執行器頁面804第四版中,他總是在簡單的應用程序中提交或執行任務後使用shutdown()方法來說明Executor如何工作,如盧卡斯所說 – Error 2015-11-12 09:36:24