由于您似乎没有使用 CompletableFuture 特定方法,您可以ExecutorService
直接使用:
for (int i = 0; i < 100; i++) {
executor.submit(() -> {
try {
someTask();
} catch (InterruptedException e) {
//interrupted, just exit
Thread.currentThread().interrupt();
} catch (Exception e) {
//some other exception: cancel everything
executorService.shutdownNow();
}
});
}
shutdownNow
将中断所有已经提交的任务,执行者将拒绝新的任务提交RejectedExecutionException
。
这种方法的主要缺点是 ExecutorService 不能被重用,尽管您当然可以创建一个新的。如果这是一个问题,你将需要另一种方法。
请注意,为了有效地工作,someTask()
需要定期检查线程的中断状态并在中断时退出,或者使用可中断的方法。例如,如果someTask
是一个循环运行一些计算并且您从不检查线程中断状态,则循环将完全运行并且不会停止。