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,一旦程序(主线程)终止,任务将自动终止。
相关文章