CountDownLatch 使用示例
package com.mybatis.plus.utils; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Console; import com.alibaba.fastjson.JSONObject; import com.mybatis.plus.config.cache.GuavaLocalCache; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.AbstractList; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CountDownLatch; public class Test { public static void main(String[] args) throws Exception{ // 定义CountDownLatch , 计数器数量为“子任务的个数” final CountDownLatch latch = new CountDownLatch(5); List<StringBuilder> stringBuilders = new ArrayList<>(); stringBuilders.add(new StringBuilder("111")); stringBuilders.add(new StringBuilder("222")); stringBuilders.add(new StringBuilder("333")); stringBuilders.add(new StringBuilder("444")); stringBuilders.add(new StringBuilder("555")); ThreadPoolManager threadPoolManager = ThreadPoolManager.newInstance(); for (StringBuilder stringBuilder : stringBuilders) { threadPoolManager.addExecuteTask(() -> { try { handle(stringBuilder, latch); } catch (InterruptedException e) { e.printStackTrace(); } }); } Console.log("{}:等待任务执行完毕", new Date()); latch.await(); Console.log("{}:全部任务已经执行完毕", new Date()); Console.log("stringBuilders:{}", JSONObject.toJSONString(stringBuilders)); } public static void handle(StringBuilder stringBuilder, CountDownLatch latch) throws InterruptedException { String name = Thread.currentThread().getName(); stringBuilder.append("#666"); Thread.sleep(3000); Console.log("线程:{} 执行完毕!", name); latch.countDown(); } }
执行结果:
Connected to the target VM, address: '127.0.0.1:51906', transport: 'socket' Thu Jul 21 16:05:41 CST 2022:等待任务执行完毕 线程:cleanRecord-pool-0 执行完毕! 线程:cleanRecord-pool-4 执行完毕! 线程:cleanRecord-pool-2 执行完毕! 线程:cleanRecord-pool-3 执行完毕! 线程:cleanRecord-pool-1 执行完毕! Thu Jul 21 16:05:44 CST 2022:全部任务已经执行完毕 stringBuilders:["111#666","222#666","333#666","444#666","555#666"]
⎛⎝官萧何⎠⎞一只快乐的爪哇程序猿;邮箱:1570608034@qq.com