Java并发 - CompletableFuture

本文介绍了Java的CompletableFuture类在并发编程中的应用,展示了如何实现异步执行任务并进行回调处理。通过实例代码解释了如何创建无返回值的任务以及处理有返回值的任务,并在任务完成后进行善后工作,提高程序执行效率。

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

CompletableFuture 可实现并发,主业务线程可以及时释放;异步线程完成工作,执行回调函数,完成善后工作;提高了执行效率。

例如,此时一个线程执行5个步骤的任务,此时第2步操作与后续的3步无关,此时第2步可以异步执行,让后面操作无需等待继续执行。

任务无返回值

public void testFutureVoid() throws ExecutionException, InterruptedException {
    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName() + " => Void");
    });
    System.out.println("如果这行代码先执行,说明 CompletableFuture 是异步的");
    future.get(); // 获取异步执行的返回结果
}

任务有返回值(异步回调)

public void testFutureReturn() throws ExecutionException, InterruptedException {
    // 供给型 异步执行任务
    CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
        System.out.println(Thread.currentThread().getName() + " => Integer");
        // int i = 10 / 0;
        return 1024;
    });

    // 捕获异常方式:来判断执行成功还是失败
    try {
        // 获取异步执行的返回结果
        Integer integer = future.get();
        System.out.println(integer);
    } catch (InterruptedException | ExecutionException e) {
        System.out.println("获取返回值失败");
    }

    // 异步回调方式:来判断执行成功还是失败
    Integer result = future.whenComplete((t, u) -> {
        System.out.println("t=>" + t);
        System.out.println("u=>" + u);
    }).exceptionally(e -> {
        System.out.println(e.getMessage());
        return 500;
    }).get();

    System.out.println("执行结果:" + result);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值