为什么即使我不调用 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
输出:
Hello
World!
此代码既不调用也不调用 :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
输出:
World!
Hello
我不知道为什么案例2的可运行块正在工作。