2014-10-01 19 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再创造”。