Android,Java:ExecutorService在关闭后执行execute

6

我有一个 ExecutorService

private final ExecutorService listenDataExecutorService = 
                              Executors.newSingleThreadExecutor();

有些情况下,我需要让执行器停止工作。 为此,我调用 listenDataExecutorService.shutdown();

过了一段时间后,我需要这个执行器再次执行该任务。 但是当我调用listenDataExecutorService.execute()时会抛出异常。

如何在 shutdown 后为执行器执行新的任务?

2个回答

6

一旦执行器服务被关闭,就无法重新激活。创建一个新的执行器服务以重新启动执行:

listenDataExecutorService = Executors.newSingleThreadExecutor();

如果要进行操作,您需要取消final修饰符。

另一个选择是取消所有待处理的任务,然后在想要恢复执行时重新安排它们。


除了“shutdown”之外,是否有其他清理当前执行器任务的方法? - Jim
如果您使用ThreadPoolExecutor,则可以执行remove(Runnable)操作。 - aioobe
考虑再多一点,我建议您创建一个高级服务,其中包含启动/暂停/恢复/停止方法,该服务反过来会在内部管理执行器服务。 - aioobe

0

首先,您必须删除 final 访问级别修饰符以在后期重新创建 ExecutorServicefinal 修饰符不允许在重新初始化期间更改 ExecutorService 的引用。

在某些情况下,我需要停止执行器的工作。 为此,我调用 listenDataExecutorService.shutdown();

您必须按正确顺序调用三个方法来关闭 ExecutorService: shutdown, awaitTermination, shutdownNow

请查看以下帖子:

如何正确关闭java ExecutorService

然后过一段时间,我需要这个执行器再次执行此任务。 但是当我调用 listenDataExecutorService.execute() 时,会抛出异常。

如何在关闭后为执行器执行新任务?

在调用ExecutorServiceexecute方法之前,该服务不应处于shutdown状态。请确保ExecutorService处于适当的状态以接受任务 => 您的应用程序代码应正确处理ExecutorService的“关闭”和“重新创建”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接