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"]

 

posted @ 2022-07-21 16:59  官萧何  阅读(212)  评论(0编辑  收藏  举报