2014-10-01 17 views
2

後,我有一個ExecutorServiceAndroid及Java:ExecutorService的執行關機

private final ExecutorService listenDataExecutorService = 
           Executors.newSingleThreadExecutor(); 

在相同的情況下,我需要執行停止做他的工作。 對此我打電話listenDataExecutorService.shutdown();

然後過了一段時間,我需要這個執行者再次做這個工作。 但是,當我撥打listenDataExecutorService.execute()異常被拋出。

如何在shutdown之後執行執行程序的新任務?

回答

3

執行程序服務一旦關閉,就無法重新激活。創建一個新的執行服務重新啓動執行:

listenDataExecutorService = Executors.newSingleThreadExecutor(); 

(你不得不雖然降final修改。)

另一種選擇是取消所有尚未完成的任務,而不是,然後重新安排他們當你想恢復執行。

+0

除了「關機」,還有其他方法可以清除當前的執行程序任務嗎? – Jim 2014-10-01 14:06:58

+0

如果你使用ThreadPoolExecutor,你有一個remove(Runnable)操作。 – aioobe 2014-10-01 14:08:23

+0

考慮到這一點,我建議你使用啓動/暫停/恢復/停止方法創建更高級別的服務,這些方法反過來在內部管理執行程序服務。 – aioobe 2014-10-01 14:18:12

0

首先,您必須刪除final訪問級別修改器,以在後期重新創建ExecutorServicefinal修改器不允許您在重新初始化期間稍後更改ExecutorService的引用。

在同樣的情況下,我需要執行者停止執行他的工作。爲此,我叫listenDataExecutorService.shutdown();

你必須調用三種方法在正確的順序來關閉ExecutorServiceshutdown, awaitTermination, shutdownNow

看看下面的帖子:

How to properly shutdown java ExecutorService

然後過了一段時間,我需要這個執行者再次做這個工作。但是,當我撥打listenDataExecutorService.execute()異常被拋出。

如何在關機後爲執行器執行新任務?

您對ExecutorService調用execute之前,該服務不應該在shutdown狀態。確保ExecutorService處於正常狀態,接受任務=>您的應用程序代碼應妥善處理「關機」和ExecutorService再創造」。