有没有办法无意中停止Executor的线程?

时间:2016-01-14 16:10:58

标签: java multithreading

我尝试使用这个可怕的代码崩溃标准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()),其他提交的任务都将继续由池执行?

1 个答案:

答案 0 :(得分:3)

您的执行程序服务使用线程池。如果一个线程被杀死,另一个线程将被实例化以执行下一个任务。

您的呼叫Executors.newFixedThreadPool(1);仅限制活动线程数。

要停止执行者服务,您必须致电:

executorService.shutdown();