java(java8 CompletableFuture)异步执行之后获取回调
应用场景是产品中需要有一个批量执行的任务,很多店铺同时执行,并且需要执行之后的结果进行业务处理,然后在全部执行完毕之后通知处理完毕
用Future和Callable虽然可以阻塞获取结果,但是因为处理起来有些繁琐,比较消耗资源,而CompletableFuture可以满足这个需求,让异步编程变的更加轻松。
直接上demo
import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class TestMain { public static void main(String[] args) { //批量异步 ExecutorService executor = Executors.newFixedThreadPool(1000); for (int i = 0; i < 10; 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(); } } }
如果大家有什么不解,或意见,欢迎在下方留言,楼主看到就会回复的,谢谢。
作者:一角01
出处:www.cnblogs.com/-renyu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本文如对您有帮助,还请多帮【推荐】下此文。