如何正确关闭 java ExecutorService
我有一个简单的java,运行一些任务对象(实现)。ExecutorService
Callable
ExecutorService exec = Executors.newSingleThreadExecutor();
List<CallableTask> tasks = new ArrayList<>();
// ... create some tasks
for (CallableTask task : tasks) {
Future future = exec.submit(task);
result = (String) future.get(timeout, TimeUnit.SECONDS);
// TASKS load some classes and invoke their methods (they may create additional threads)
// ... catch interruptions and timeouts
}
exec.shutdownNow();
完成所有任务(完成或超时)后,我尝试关闭执行程序,但它不会停止:我怀疑某些超时的任务未正确终止。exec.isTerminated() = FALSE.
是的,我知道遗嘱执行人的关闭并不能保证任何事情:
除了尽最大努力停止处理主动执行的任务之外,没有其他保证。例如,典型的实现将通过 {@link Thread#interrupt} 取消,因此任何无法响应中断的任务都可能永远不会终止。
我的问题是,有没有办法确保这些(任务)线程将终止?我想出的最好的解决方案是在我的程序结束时调用,但这显然是愚蠢的。System.exit()