ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【工具类】CompletableFuture 使用详解

2022-01-23 22:32:17  阅读:151  来源: 互联网

标签:System 详解 CompletableFuture Test static 工具 supplyAsync public


runAsync和supplyAsync方法,这个两个方法为CompletableFuture的主要使用方式,其主要作用给任务提供异步线程的操作方式

如何使用
CompletableFuture 提供了四个静态方法来创建一个异步操作。

public static CompletableFuture<Void> runAsync(Runnable runnable)
public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)

其中:
runAsyn方法不支持返回值

public class CompletableFutureTest02 {

    public CompletableFuture Test(){
        CompletableFuture future  = CompletableFuture.runAsync(()->{
            for (int i = 0; i < 10; i++) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(">>>>print.."+i);
            }
        });
        return future;
    }


    public static void main(String[] args) {
        CompletableFutureTest02 test02 = new CompletableFutureTest02();
        test02.Test().join();
    }
}

supplyAsync可以支持返回值

public class CompletableFutureTest {
    public Integer Test() throws ExecutionException, InterruptedException {
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(()->{

            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return 1;
        });

        CompletableFuture<Integer> future01 = CompletableFuture.supplyAsync(()->{

            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return 1;
        });

        //使用get方法来获取返回值
        return future.get()+future01.get();
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFutureTest test = new CompletableFutureTest();

        Long begin = System.currentTimeMillis();
        System.out.println(">>>>>>>begin"+begin);
        /*
        在执行Test()方法是会启动future和future01两个线程
        并且两个线程执行完毕后获取到结果值才代表Test()方法执行结束
         */
        
        System.out.println(test.Test());
        Long end = System.currentTimeMillis();
        Long exec = end-begin;
        System.out.println(">>>>>>>end"+end+">>>>>>exec"+exec);
    }
}

计算结果完成时的回调方法

当CompletableFuture的计算结果完成,或者抛出异常的时候,可以执行特定的Action。主要是下面的方法:

public CompletableFuture<T> whenComplete(BiConsumer<? super T,? super Throwable> action)
public CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T,? super Throwable> action)
public CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T,? super Throwable> action, Executor executor)
public CompletableFuture<T> exceptionally(Function<Throwable,? extends T> fn)

参考:CompletableFuture 使用详解

标签:System,详解,CompletableFuture,Test,static,工具,supplyAsync,public
来源: https://www.cnblogs.com/Mateo-dengmin/p/15837638.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有