码迷,mamicode.com
首页 > 编程语言 > 详细

java(java8 CompletableFuture)异步执行之后获取回调

时间:2019-10-10 15:21:10      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:sleep   syn   table   class   adp   trace   阻塞   nbsp   任务   

应用场景是产品中需要有一个批量执行的任务,很多店铺同时执行,并且需要执行之后的结果进行业务处理,然后在全部执行完毕之后通知处理完毕

用Future和Callable虽然可以阻塞获取结果,但是因为处理起来有些繁琐,比较消耗资源,而CompletableFuture可以满足这个需求,让异步编程变的更加轻松。

直接上demo

    public static void main(String[] args) {
        //批量异步
        ExecutorService executor = Executors.newFixedThreadPool(1000);
        for (int i = 0; i < 10; i++) {
            CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() {
                @Override
                public String get() {
                    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();
        }
    }

  如果大家有什么不解,或意见,欢迎在下方留言,楼主看到就会回复的,谢谢。

java(java8 CompletableFuture)异步执行之后获取回调

标签:sleep   syn   table   class   adp   trace   阻塞   nbsp   任务   

原文地址:https://www.cnblogs.com/-renyu/p/11647940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!