java - thanAccept() 不打印值

标签 java multithreading concurrency completable-future

<分区>

我正在学习 CompletableFuture,在下面的代码片段中,thenAccept() 方法没有打印应该为 10 的值,但程序编译无一异常(exception)。谁能给我解释一下这是什么问题?

import java.util.concurrent.*;
import java.util.stream.Stream;

public class CompletableFutureTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture.supplyAsync(CompletableFutureTest::counting).thenAccept(System.out::println);
        System.out.println("xD");
    }
    public static int counting() {


        Stream.iterate(1, integer -> integer +1).limit(5).forEach(System.out::println);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return 10;
    }

}

最佳答案

您的 CompletableFuture 开始使用主线程,在完成主线程后您的应用程序结束。

您需要等待 CompletableFuture 完成。 你可以做到:

CompletableFuture.supplyAsync(CompletableFutureTest::counting)
        .thenAccept(System.out::println)
        .get();

方法 get() 必要时等待这个 future 完成

关于java - thanAccept() 不打印值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47556494/

相关文章:

Java Home 未定义(wso2ei-6.4.0 安装)

ruby - 将线程 ID 添加到 ruby​​ 日志

java - Java 8中等待状态线程不断增加的原因是什么

Java并发: Do I have to synchronise a method that only retrieve state and does not modify it?

java - 创建 Java Web 服务客户端

java - 我在向数据库插入记录时遇到 java 堆空间错误?

java - 处理ajax请求并发送响应java servlet

c# - C#中长时间运行任务的进度条

C#/Java lock(object) 的 c++ 模拟

c# struct array 的并发性