Java线程同步工具-CountDownLatch

来源:互联网 发布:原生js写点击隐藏 编辑:程序博客网 时间:2024/06/05 18:53

CyclicBarrier:

可以理解线程运行总的任务量的计数器

测试代码

package com.zhiwei.thread;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CountDownLatchTest {    public static void main(String[] args) {        // 缓存线程池:自动创建线程执行任务,如果线程执行完成任务则保存,供下次使用,如果线程不够则动态创建        ExecutorService threadPool = Executors.newCachedThreadPool();        CountDownLatch ct = new CountDownLatch(3); // 表示将完成3个任务量:任务计数器:多线程完成一些列操作        for (int i = 0; i < 3; i++) {            threadPool.execute(new Runnable() {                @Override                public void run() {                    try {                        Thread.sleep((long) (Math.random() * 10000));                        ct.countDown(); // 减1                        System.out.println(Thread.currentThread().getName() + "完成分任务,剩余任务:" + ct.getCount());                        if (ct.getCount() == 0) {                            System.out.println("恭喜,总任务已完成!");                        }                        ct.await(); // 如果ct为0则调用return函数返回                    } catch (Exception e) {                        e.printStackTrace();                    }                }            });        }        threadPool.shutdown();    }}

效果:
这里写图片描述