java-8 - 为什么 ExecutorService 不在流中工作?

标签 java-8 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);

但是输出是none,什么也没有打印出来。

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

一个奇怪的发现是,当使用默认的DefaultThreadFactory 时,它是有效的。

ExecutorService executorService = Executors.newCachedThreadPool();

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

最佳答案

您忘记将 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/

相关文章:

Java ExecutorService invokeAll() 中断

java - 在 java 中将 List<Object> 转换为 Map<K,V>

java - 如何在 anyMatch() java 8 流中应用复合 BiPredicate

java - 如何以方便的方式检查列表中是否有多个元素?

java - 具有 CompletableFuture 的 Vertx HTTPClient 阻止回调线程

java - executorService多线程池的性能

java - java中根据条件动态添加执行器

java - 我需要处理 executorservice 中的异常吗

lambda - Java8中使用流的map方法中的多个操作

使用 Executor 的 JavaFX 应用程序在退出时挂起