我有ExecutorService
:
private final ExecutorService listenDataExecutorService =
Executors.newSingleThreadExecutor();
在同样的情况下,我需要遗嘱执行人员停止工作。
为此,我致电listenDataExecutorService.shutdown();
然后过了一段时间,我需要这个执行者再次完成这项工作。
但是当我调用listenDataExecutorService.execute()
时会抛出异常。
如何在shutdown
之后执行执行程序的新任务?
答案 0 :(得分:3)
一旦关闭执行程序服务,就无法重新激活它。创建一个新的执行程序服务以重新启动执行:
listenDataExecutorService = Executors.newSingleThreadExecutor();
(您必须删除final
修饰符。)
另一种选择是取消所有待处理的任务,然后在您想要恢复执行时重新安排它们。
答案 1 :(得分:0)
首先,您必须删除final
访问级别修饰符,才能在后期重新创建ExecutorService
。 final
修饰符不允许您稍后在重新初始化期间更改ExecutorService
的引用。
在同样的情况下,我需要遗嘱执行人员停止工作。为此,我致电
listenDataExecutorService.shutdown();
您必须以正确的顺序调用三个方法才能关闭ExecutorService
:shutdown, awaitTermination, shutdownNow
看看下面的帖子:
How to properly shutdown java ExecutorService
然后过了一段时间,我需要这个执行者再次完成这项工作。但是当我调用
listenDataExecutorService.execute()
时会抛出异常。如何在关机后执行执行程序的新任务?
在execute
上致电ExecutorService
之前,该服务不应处于shutdown
状态。确保ExecutorService
处于正确状态才能接受任务=>您的应用程序代码应正确处理" 关闭 "和" 重新创建 " ExecutorService
。