CountDownLatch的使用

通俗的讲就是,CountDownLatch相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过,但是一旦大门打开,所有线程都通过了,那么这个CountDownLatch的状态就失效了,门的状态也就不能变了,只能是打开状态。也就是说CountDownLatch的状态是一次性的

public class CountDownLatchDemo {
    
    final static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch latch = new CountDownLatch(2);// 两个工人的协作
        Worker worker1 = new Worker("zhangsan", 5000, latch);
        Worker worker2 = new Worker("lisi", 8000, latch);
        worker1.start();//
        worker2.start();//
        latch.await();// 等待所有工人完成工作
        System.out.println("all work done at " + sdf.format(new Date()));
    }

    static class Worker extends Thread {
        String workerName;
        int workTime;
        CountDownLatch latch;

        public Worker(String workerName, int workTime, CountDownLatch latch) {
            this.workerName = workerName;
            this.workTime = workTime;
            this.latch = latch;
        }

        public void run() {
            System.out.println(workerName + " start at " + sdf.format(new Date()));
            doWork();// 工作了
            System.out.println( workerName + " complete at " + sdf.format(new Date()));
            latch.countDown();// 工人完成工作,计数器减一

        }

        private void doWork() {
            try {
                Thread.sleep(workTime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
原文地址:https://www.cnblogs.com/moris5013/p/10905693.html