Java使用 CompletableFuture 实现异步,并且在任务执行完成后汇总任务执行情况

Java 用 CompletableFuture 实现批量任务异步处理:从代码解析到最佳实践

在实际开发中,我们经常需要处理批量任务(如批量数据同步、批量订单处理等),如果采用串行方式处理,效率会非常低下。本文将通过一段基于 CompletableFuture 的批量任务异步处理代码,详细解析如何利用 Java 异步编程能力提升批量任务处理效率,并分享实践中的优化要点。

一、业务场景与代码功能

假设我们有一个批量任务处理场景:需要对一批数据(每条数据包含唯一标识 id)进行异步处理,要求:

  1. 每条数据独立异步执行,互不阻塞;
  2. 记录每条数据的处理结果(成功/失败);
  3. 所有任务完成后,触发通知逻辑(如发送邮件、消息);
  4. 保证线程安全,避免并发问题。

下面是实现该场景的核心代码,我们将逐行解析其设计思路与技术细节:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 基于 CompletableFuture 的批量任务异步处理器
 */
public class BatchTaskProcessor {
   
   

    /**
     * 批量处理任务
     * @param taskMapList 待处理的任务列表(每条任务是一个包含"id"的Map)
     */
    public void processTickets(List<Map<String,String>> taskMapList) {
   
   
        // 记录每条任务的处理结果(key: 任务id,value: 处理结果)
        HashMap<String, Boolean> resultMap = new HashMap<>();
        // 原子计数器:跟踪已完成的任务数量(线程安全)
        AtomicInteger completedTasks = new AtomicInteger(0);

        // 存储所有异步任务的CompletableFuture,用于后续等待所有任务完成
        List<CompletableFuture<Void>> futures = new ArrayList<>();
        // 自定义线程池:固定10个线程(根据任务量调整)
        ExecutorService taskExecutor = Executors.newFixedThreadPool(10);

        // 遍历任务列表,为每条任务创建异步处理逻辑
        for (Map<String,String> task : taskMapList) {
   
   
            // 用runAsync创建无返回值的异步任务
            CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
   
   
                try {
   
   
                    // 打印当前处理的任务id(便于日志跟踪)
                    String taskId = task.get("id");
                    System.out.printf("开始处理任务,id: %s%n", taskId);
                    
                    // 用于记录任务执行日志
                    StringBuilder msg = new StringBuilder();
                    boolean isSuccess;

                    // 单独捕获每条任务的执行异常
                    try {
   
   
                        // 执行核心任务逻辑(具体业务由executeTask实现)
                        isSuccess = 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值