使用CompletableFuture构建异步应用(1)

本文通过具体示例介绍了如何使用 Java 的 CompletableFuture 进行异步编程,包括 supplyAsync 方法的不同使用方式,以及如何组合多个任务并等待它们全部完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static void main(String[] args) throws Exception {

    ExecutorService executorService = Executors.newFixedThreadPool(3);

    ThreadTask threadTask = new ThreadTask();
    String name = "1";

    //supplyAsync有返回值,runAsync无返回值,加入线程池参数,则用指定的线程池执行,不加则用默认的线程池执行。
    //例1.1:代码块
    CompletableFuture<String> completableFuture11 = CompletableFuture.supplyAsync(() -> {
        return getStaticSupply();
    });

    //例1.2:无参静态方法
    CompletableFuture<String> completableFuture12 = CompletableFuture.supplyAsync(ThreadTask::getStaticSupply);

    //例1.3:无参静态方法
    CompletableFuture<String> completableFuture13 = CompletableFuture.supplyAsync(ThreadTask::getStaticSupply,executorService);


    //例2.1:带参静态方法
    CompletableFuture<String> completableFuture21 = CompletableFuture.supplyAsync(() -> {
        return ThreadTask.getStaticParamSupply(name);
    });

    //例2.2:带参静态方法
    CompletableFuture<String> completableFuture22 = CompletableFuture.supplyAsync(() -> ThreadTask.getStaticParamSupply(name));

    //例2.3:带参静态方法
    CompletableFuture<String> completableFuture23 = CompletableFuture.supplyAsync(() -> ThreadTask.getStaticParamSupply(name),executorService);


    //例3.1 调用对象无参数方法
    CompletableFuture<String> completableFuture31 = CompletableFuture.supplyAsync(() -> {
        return threadTask.getObjectName();
    });

    //例3.2 调用对象无参数方法
    CompletableFuture<String> completableFuture32 = CompletableFuture.supplyAsync(threadTask::getObjectName);

    //例3.3 调用对象无参数方法
    CompletableFuture<String> completableFuture33 = CompletableFuture.supplyAsync(threadTask::getObjectName,executorService);


    //例4.1 调用对象有参数方法
    CompletableFuture<String> completableFuture41 = CompletableFuture.supplyAsync(() -> {
        return threadTask.getObjectParamName(name);
    });

    //例4.2 调用对象有参数方法
    CompletableFuture<String> completableFuture42 = CompletableFuture.supplyAsync(() -> threadTask.getObjectParamName(name));

    //例4.3 调用对象有参数方法
    CompletableFuture<String> completableFuture43 = CompletableFuture.supplyAsync(() -> threadTask.getObjectParamName(name),executorService);

CompletableFuture<Void> allResult=CompletableFuture.allOf(
            completableFuture11,completableFuture12,completableFuture13,
            completableFuture21,completableFuture22,completableFuture23,
            completableFuture31,completableFuture32,completableFuture33,
            completableFuture41,completableFuture42,completableFuture43);

    //阻塞等待所有任务执行完成
    allResult.join();


}

private static String getStaticSupply() {
    return "1";
}

private static String getStaticParamSupply(String name) {
    return name;
}

private String getObjectParamName(String name) {
    return name;
}

private String getObjectName() {
    return "1111";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值