为什么ExecutorService不在流中工作?

Hea*_*ren 2 executorservice java-8

我通过流传递一组任务,这是一个简化的演示:

    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;
        });
    });
Run Code Online (Sandbox Code Playgroud)

提交完所有任务后,我尝试等待所有这些任务完成后使用:

    executorService.shutdown();
    executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
Run Code Online (Sandbox Code Playgroud)

但输出没有,没有打印出来.

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

一个奇怪的发现是,当使用默认的DefaultThreadFactory时,它正在工作.

ExecutorService executorService = Executors.newCachedThreadPool();
Run Code Online (Sandbox Code Playgroud)

FYI守护程序线程是我已经检查过的原因.为了调试,我故意设置它们.

Ole*_*hov 6

你忘了将a传递RunnableThread构造函数:

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