组合式异步编程2024-9-24

组合式异步编程

异步任务管理

组合式编程在Java8这通过CompletableFature提供了强大的异步任务管理能力、

与Future/FutureTask对比

1.基本的任务执行服务

Java提供了ExecutorService来管理异步任务的执行。

可以通过Excutors工厂方法创建线程池。

ExecutorService executot = Eexcutors.newFixedThreadPool(4);
Future<String> future = executor.submit(() -> {
    // 执行耗时操作
    return "结果";    
});

2.基本的CompletableFuture

CompletableFuture是一种强大的工具,可以表示一个异步计算的结果。

可以通过supplyAsync方法异步执行任务。

CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
    //耗时操作
    return "异步结果";
});

3.CompletableFuture对Future的基本增强

CompletableFuture提供了更强的功能,例如

可以手动完成任务

可以通过组合多个异步任务创建复杂的任务流

可以处理异常

4.进一步理解Future/CompletableFuture

响应结果或异常

whenComplete:处理结果或异常

completableFuture.whenComplete((result,exception) -> {
    if(exception != null){
        System.out.println("出现异常:" + exception);
    }else{
        System.out.println("结果:" + result);
    }
});

handle:类似于whenComplete,但可以返回一个新的值

completableFuture.handle((result,exception) -> {
    if (exception != null){
        return "处理异常"l
    }
    return "处理结果:" + result;
});

exceptionally:处理异常并返回一个默认值

completableFuture.exceptionalyy(exception -> {
    return "默认值:" + exception.getMessage();
});

构建依赖单一阶段的任务流

1.thenRun:在前一个任务完成后运行一个没有输入的任务

completableFuture.thenRun(() ->{
    System.out.println("任务完成后执行");
});

2.thenAccept:在前一个任务完成后运行一个有输入的任务

completableFuture.thenAccept(result -> {
    System.out.println("结果:" + result);
});

thenApply:在前一个任务完成后处理结果并返回一个新值

completableFuture.thenApply(result -> {
    return  result.toUpperCase();
});

3.thenCompose:用于链接多个异步任务,返回一个新的CompletableFuture

completableFuture.thenCompose(result -> {
    return CompletableFuture.supplyAsync(() -> result + "处理后");
});

构建依赖两个阶段的任务流

可以通过thenCombine将两个CompletableFuture的结果结合

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "World");

future1.thenCombin(future2,(result1,result2) -> {
    return result1 + " "+result2;
}).thenaAccept(System.out::println);

构建依赖多个阶段的任务流

可以通过thenCombine,thenCompose和其他组合方法来构建更复杂的依赖关系。

小结

CompletableFuture提供了更灵活和强大的异步编程能力,允许开发者以组合的方式构建复杂的异步任务流。

通过链式调用和错误处理,能够更有效地管理异步操作,提高代码的可读性和可维护性,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值