任务批处理通用工具类
package com.sxsoft.admin.utils; import com.sxsoft.admin.entity.TIsp; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.concurrent.*; import java.util.function.Consumer; /*** * 任务批处理通用工具类 */ public class TaskDisposeUtils { /** * 使用线程池批处理,当所有任务处理完毕后才会返回 * @param taskList 任务列表 * @param consumer 处理任务的方法 * @param executor 线程池 * @param <T> * @throws InterruptedException */ public static <T> void dispose(List<T> taskList, Consumer<? super T> consumer, Executor executor){ try { if (taskList == null || taskList.size() == 0) { return; } Objects.nonNull(consumer); CountDownLatch countDownLatch = new CountDownLatch(taskList.size()); for (T item : taskList) { executor.execute(() -> { try { consumer.accept(item); } finally { countDownLatch.countDown(); } }); } countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) throws InterruptedException { long startTime = System.currentTimeMillis(); //任务列表 List<String> taskList = new ArrayList<>(); for (int i = 0; i < 50; i++) { //模拟构建任务数据 taskList.add("任务-" + i); } ExecutorService executorService = Executors.newFixedThreadPool(10); //调用工具类批处理任务 TaskDisposeUtils.dispose(taskList, TaskDisposeUtils::disposeTask, executorService); System.out.println("任务处理完毕,耗时(ms):" + (System.currentTimeMillis() - startTime)); executorService.shutdown(); } public static void disposeTask(String task) { System.out.println(String.format("【%s】处理成功", task)); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { throw new RuntimeException(e); } } public static void disposeTask2(TIsp task) { System.out.println(String.format("【%s】处理成功2", task.getIspName())); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { throw new RuntimeException(e); } } }
吾乃代码搬运工,侵联删
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了