CompletableFuture 编排异步任务

CompletableFuture 编排异步任务

CompletableFuture 让异步编程更优雅。本文讲它的核心能力和组合方式。

先建立一个最小案例

并发问题不要一开始就上复杂业务。可以先准备一个计数器场景:

class Counter {
private int count = 0;

public void add() {
count++;
}

public int get() {
return count;
}
}

这段代码在单线程里没有问题,但多线程同时调用 add() 时,count++ 不是原子操作,结果可能比预期小。

正确处理思路

如果只是简单计数,可以用 AtomicInteger

class Counter {
private final AtomicInteger count = new AtomicInteger();

public void add() {
count.incrementAndGet();
}

public int get() {
return count.get();
}
}

如果临界区里有多步业务逻辑,可以考虑 synchronizedReentrantLock。选择时不要只看性能,先看代码是否清晰、锁范围是否足够小、异常时是否能释放锁。

排查建议

线上并发问题通常不稳定复现。可以先看日志里是否有重复请求、状态覆盖、库存扣减异常,再用压测或单元测试构造并发场景。


   转载规则


《CompletableFuture 编排异步任务》 小乐 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录