为什么并发不用synchronized而是compoletableFuture

为什么并发不用synchronized而是compoletableFuture

因为compoletable是jdk8引入的新工具,他可以帮我写异步、非堵塞的代码,从而避免了传统的synchronized所带来的性能瓶颈,线程堵塞和复杂的锁管理。

CompletableFuture

使用synchronized回导致线程堵塞,线程需要等锁释放后才能继续执行

CompletableFuture支持异步执行任务,不会堵塞当前线程,任务一旦完成就会自动回调对应的处理逻辑。

CompletableFuture.supplyAsync(() -> {
    // 异步任务,模拟耗时操作
    return "Result from async task";
}).thenAccept(result -> {
    // 任务完成后的回调处理
    System.out.println(result);
});

简化回调逻辑,避免回调地狱

在传统的异步编程中(通过线程池或回调函数),代码容易变得复杂和嵌套(回调地狱),让异步更加清晰

CompletableFuture.supplyAsync(() -> {
    return "Task 1";
}).thenApply(result -> {
    return result + " -> Task 2";
}).thenAccept(finalResult -> {
    System.out.println(finalResult);
});

输出Task 1 -> Task 2
通过链式调用,多个任务按顺序执行,代码保持简洁。

更高的性能:非堵塞 vs 堵塞

synchronized会导致线程堵塞,多个线程竞争产生的上下文切换,影响性能。

CompletableFuture使用Forkjoinpool可以实现轻量级的线程任务调度,减少上下文切换。

并行处理

completablefuture提供了多种任务组合的方式,可以让多个任务并行执行,并在所有任务完成后处理结果。

CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> "Task 1");
CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> "Task 2");

task1.thenCombine(task2, (result1, result2) -> {
    return result1 + " and " + result2;
}).thenAccept(System.out::println);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇塞大嘴好帅(DaZuiZui)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值