本文介紹了Java:CompletableFuture.SupplyAsync()不調用異步方法的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
讓我們假設以下主要方法:
public class Async {
public static void main(String[] args) throws Exception {
CompletableFuture.supplyAsync(Async::sendMsg);
System.out.println(Thread.currentThread().getName());
}
public static String sendMsg() {
try {
TimeUnit.SECONDS.sleep(5);
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
我只想進行一個異步調用,而不阻塞Main-Thread。但控制臺僅輸出以下字符串:
main
sendMsg
-方法的輸出似乎未被調用。但是為什么呢?我錯過了什么嗎?
推薦答案
是因為CompletableFuture.supplyAsync(Supplier)使用common ForkJoinPool,一旦程序(主線程)終止,任務將自動終止。
這篇關于Java:CompletableFuture.SupplyAsync()不調用異步方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,