我认为主线程必须在子线程之后结束。但是下面的代码显示了在打印“异步结束”之前该过程完成了。原因是什么?有人可以解释吗?
import java.util.concurrent.CompletableFuture;
public class Test {
public static void main(String[] args) {
CompletableFuture.runAsync(() -> {
try {
System.out.println("async start");
Thread.sleep(3000);
System.out.println("async end");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println("main end");
}
}
答案 0 :(得分:4)
它已执行,您只是在等待结果。
CompleteableFuture.runAsync()
的Javadoc说:
返回一个新的CompletableFuture,该新CompletableFuture由运行在
resources: [ { name: 'Building', title: 'Building', field: 'buildingId', dataSource: { transport: { read: function (e) { PageMethods.getBuildingList(function (response) { e.success(response); }); }, }, }, dataTextField: 'name', dataValueField: 'id', }, { name: 'Class', title: 'Class', field: 'classId', dataSource: { transport: { read: function (e) { PageMethods.getClassList(function (response) { e.success(response); }); }, } }, dataTextField: 'name', dataValueField: 'id' } ]
中的任务在运行给定操作后异步完成。
ForkJoinPool.commonPool()
的Javadoc说:
任何在程序终止之前依赖异步任务处理完成的程序都应在退出前调用
ForkJoinPool.commonPool()
。
所以,调用它。