为什么ExecutorService在流中不起作用

为什么ExecutorService在流中不起作用

我正在按流传递一组任务,这是一个简化的演示:

    ExecutorService executorService = Executors.newCachedThreadPool((r) -> {
        Thread thread = new Thread();
        thread.setDaemon(true); // even I removed this, it's still not working;
        return thread;
    });
    IntStream.range(0, TASK_COUNT).forEach(i -> {
        executorService.submit(() -> {
            out.println(i);
            return null;
        });
    });

在所有任务提交了之后,我尝试使用以下命令等待所有任务完成:
    executorService.shutdown();
    executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

但是输出为空,没有输出。

有问题?任何帮助将不胜感激。

奇怪的发现是,当使用默认的 DefaultThreadFactory 时,它可以正常工作。
ExecutorService executorService = Executors.newCachedThreadPool();

F.Y.I Daemon线程是我已经检查过的原因。为了调试,我故意设置它们。

最佳答案

您忘记了将Runnable传递给Thread构造函数:

ExecutorService executorService = Executors.newCachedThreadPool(r -> {
    Thread thread = new Thread(r);
                               ^
    thread.setDaemon(false);
    return thread;
});

关于java-8 - 为什么ExecutorService在流中不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51087888/

10-10 02:50