Java CompletableFuture 异步执行返回回调
应用场景是产品中需要有一个批量执行的任务,很多商家同时执行,并且需要执行之后的结果进行业务处理,然后在全部执行完毕之后通知处理完毕
用Future和Callable虽然可以阻塞获取结果,但是因为处理起来有些繁琐,比较消耗资源,而CompletableFuture可以满足这个需求,让异步编程变的更加轻松。
//批量异步
ExecutorService executor = Executors.newFixedThreadPool(1000);
for (int i = 0; i < 1000; i++) {
final int i1=i;
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
String uuid = UUID.randomUUID().toString();
System.out.println("线程" + uuid + "开始了");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return uuid;
}, executor);
future.thenAccept(uuid -> System.out.println("线程" + uuid + "结束了"));
}
//关闭线程池
executor.shutdown();
try {
if (executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)) {
System.out.println("所有任务已经执行完毕");
}
} catch (InterruptedException e) {
e.printStackTrace();
}