我尝试使用这个可怕的代码崩溃标准ExecutorService
的固定线程池的线程,以测试其对传递给ExecutorService
的任务中发生的异常和错误的弹性:< / p>
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()
),其他提交的任务都将继续由池执行?
答案 0 :(得分:3)
您的执行程序服务使用线程池。如果一个线程被杀死,另一个线程将被实例化以执行下一个任务。
您的呼叫Executors.newFixedThreadPool(1);
仅限制活动线程数。
要停止执行者服务,您必须致电:
executorService.shutdown();