开发者社区> kunfire> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

CompletableFuture

简介: CompletableFuture
+关注继续查看

CompletableFuture演示Future功能

public class CompeltableFutureUseDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName()+"--------come in");
            int result = ThreadLocalRandom.current().nextInt(10);
            try {
                TimeUnit.MILLISECONDS.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("--------1秒钟后出结果:"+result);
            return result;
        },threadPool);

        System.out.println(Thread.currentThread().getName()+"线程先去忙别的任务");
        System.out.println(completableFuture.get());
    }
}

演示完成一个阶段后将值穿个下一个阶段

public class CompeltableFutureUseDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        try{

            CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
                System.out.println(Thread.currentThread().getName()+"--------come in");
                int result = ThreadLocalRandom.current().nextInt(10);
                try {
                    TimeUnit.MILLISECONDS.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("--------1秒钟后出结果:"+result);
                return result;
            },threadPool).whenComplete((v,e)->{
                if(e==null){
                    System.out.println("------计算完成,更新系统updateValue:"+v);
                }
            }).exceptionally(e->{
                e.printStackTrace();
                System.out.println("异常情况:"+e.getCause()+"\t"+e.getMessage());
                return null;
            });

            System.out.println(Thread.currentThread().getName()+"线程先去忙别的任务");
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            threadPool.shutdown();
        }
    }
}

image.png

演示异常

public class CompeltableFutureUseDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        try{

            CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
                System.out.println(Thread.currentThread().getName()+"--------come in");
                int result = ThreadLocalRandom.current().nextInt(10);
                try {
                    TimeUnit.MILLISECONDS.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("--------1秒钟后出结果:"+result);
                if(result>1){
                    int i = 10/0;
                }
                return result;
            },threadPool).whenComplete((v,e)->{
                if(e==null){
                    System.out.println("------计算完成,更新系统updateValue:"+v);
                }
            }).exceptionally(e->{
                e.printStackTrace();
                System.out.println("异常情况:"+e.getCause()+"\t"+e.getMessage());
                return null;
            });

            System.out.println(Thread.currentThread().getName()+"线程先去忙别的任务");
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            threadPool.shutdown();
        }
    }
}

返回结果:

image.png

CompletableFuture的优点

  • 异步任务结束后,会自动回调某个对象的方法
  • 主线程设置好回调后,不再关心异步任务的执行,异步任务之间可以顺序执行
  • 异步任务出错时,会自动回调某个对象的方法

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
异步神器CompletableFuture
异步神器CompletableFuture
14 0
JUC(一)异步调用CompletableFuture
JUC(一)异步调用CompletableFuture
113 0
CompletableFuture之灭霸的故事
CompletableFuture之灭霸的故事
66 0
把之前CompletableFuture留下的坑给填上。 (下)
把之前CompletableFuture留下的坑给填上。 (下)
130 0
多线程之 completableFuture
Callable与Runnable的功能大致相似,但是call()函数有返回值. Callable一般是和ExecutorService配合来使用的
70 0
Java CompletableFuture(1)
Java CompletableFuture(1) private Long longTimeWork() { try { //模拟耗时操作,特意阻塞5秒。
829 0
+关注
kunfire
sf
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载