小编San*_*Lee的帖子

为什么即使我不调用 get() 或 join() 这个 CompletableFuture 也能工作?

我在学习时有一个问题CompletableFuture。将get()/join()方法阻塞调用。如果我不打电话给他们中的任何一个怎么办?

此代码调用get()

// Case 1 - Use get()
CompletableFuture.runAsync(() -> {
    try {
        Thread.sleep(1_000L);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("Hello");
}).get();
System.out.println("World!");

Thread.sleep(5_000L); // Don't finish the main thread
Run Code Online (Sandbox Code Playgroud)

输出:

Hello
World!
Run Code Online (Sandbox Code Playgroud)

此代码既不调用get()也不调用join()

// Case 2 - Don't use get()
CompletableFuture.runAsync(() -> {
    try {
        Thread.sleep(1_000L);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("Hello");
});
System.out.println("World!");

Thread.sleep(5_000L); // For don't finish main thread
Run Code Online (Sandbox Code Playgroud)

输出:

World!
Hello …
Run Code Online (Sandbox Code Playgroud)

java multithreading completable-future

15
推荐指数
3
解决办法
2183
查看次数

标签 统计

completable-future ×1

java ×1

multithreading ×1