我试图崩溃的标准ExecutorService
这个可怕的代码固定的线程池的线程,以测试其对异常和错误传递给ExecutorService
任务中发生了弹性:有没有办法无意中停止Executor的线程?
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.execute(() -> {
throw new RuntimeException("Trying to kill the thread");
});
Thread.sleep(100);
executorService.execute(() -> {
System.out.println("still executing");
});
但第二任务打印still executing
,所以我认为异常被捕获或Thread
实例重新启动。 发生了什么?我可以相信,不管在任务内发生了什么(小于System.exit()
),其他提交的任务将继续由池执行吗?
这是正确的,在这你应该阅读的API文档。 “如果任何线程在关闭之前的执行期间由于失败而终止,那么如果需要执行后续任务,则新线程将取代它的位置。池中的线程将一直存在,直到它被明确关闭。 – pvg
这不是可怕的代码,这是一个_learning test_。如图所示,它只是一个手动测试,但您可以将其自动化,并将其作为某个应用程序的单元测试套件的一部分,以便记录应用程序依赖于该行为。 –