CompletableFuture
private static void testCompletableFuture() {
// forkJoinPool.commonPool 默默开启一个线程执行任务
CompletableFuture.runAsync(() -> {
System.out.println(Thread.currentThread().getName());
System.out.println("doing something");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("不睡了");
});
System.out.println("outer executing");
// 当所有的任务都完整才退出forkJoinPool commonPool
// 默认System.exit() forkJoinPool.commonPool也退出
ForkJoinPool.commonPool().awaitQuiescence(3600 * 1000, TimeUnit.MILLISECONDS);
}
多个任务异步并行
CompletableFuture<String> result1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "s1";
});
CompletableFuture<String> result2 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "s2";
});
CompletableFuture<String> result3 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "s3";
});
System.out.println(result1.get());
System.out.println(result2.get());
System.out.println(result3.get());
// 当所有的任务都完整才退出forkJoinPool commonPool
// 默认System.exit() forkJoinPool.commonPool也退出
ForkJoinPool.commonPool().awaitQuiescence(3600 * 1000, TimeUnit.MILLISECONDS);