是否有使用
ExecutorService e=Executors.newSingleThreadExecutor();
e.execute(callable)
e.shutdown()
任何成本損失相比:
new Thread(runnable).start()
是的,有一個 「懲罰」:在ExecutorService
將最有可能創建成本更高,因爲它還爲您提交的任務創建隊列,並且創建一個隊列讀取在關閉之前失敗,那麼失敗的線程將被替換爲另一個,以便運行任何後續任務(所以這裏有相當多的邏輯)。但是,您可能不希望在每次運行任務時創建一個ExecutiveService
......這可能不是ExecutorService
的最佳使用(更多內容參見下一個問題)。
如果一個Callable不是一個長的,並且永遠不會多於一個實例運行它,那麼使用-1-的代碼是可以的?或者最好將ExecutorService作爲靜態的並在調用之間重用?
建議的使用ExecutorService
的是作爲一個線程池,在那裏你保持ExecutorService
周圍,你不斷提交任務,它只要你有任務提交。它可以是靜態的或只是一個普通的成員,這是不相關的,高度依賴於你的需求/設計。即使您一次只運行一個實例(即,您只有一個單線程執行程序),但使用ExecutorService
仍然更有效,因爲它重用了該線程,所以從長遠來看,它會比創建爲您提交的每項任務提供一個新線程。
如果我有幾個任務......每個任務都有任何問題有執行者的服務或更好地有一個集中的嗎?
沒有問題,但效率低下,所以只需要一個集中的執行器服務。
如果執行程序沒有關閉(),哪些資源會消耗執行程序?
我不認爲你應該特別擔心,特別是如果你在正確的上下文中使用Executor
,它將是最小的。