package org.banyan.concurrent.lock;

import java.util.concurrent.CountDownLatch;

/**
 * 该类主要用于并发同步操作，如果是串行好像用不上这个，子任务执行countDown减一，指导count==0
 * 接着继续执行主线程
 * 倒计时锁存器的同步控制。
 * 使用AQS状态表示计数
 * CountDownLatch类位于java.util.concurrent包下，利用它可以实现类似计数器的功能。比如有一个任务A，
 * 它要等待其他4个任务执行完毕之后才能执行，此时就可以利用CountDownLatch来实现这种功能了。
 * <p>
 * CountDownLatch类只提供了一个构造器：
 *
 * @author krisjin
 * @date 2020/11/19
 */
public class CountDownLatchDemo {

    public static void main(String[] args) {

        //创建减少的latch, 初始参数是10
        CountDownLatch countDownLatch = new CountDownLatch(10);
        for (int i = 0; i < 10; i++) {
            countDownLatch.countDown();
        }


    }
}

@@ -470,38 +470,66 @@
 ) %7B%0A
-%0A        //%E5%88%9B%E5%BB%BA%E5%87%8F%E5%B0%91%E7%9A%84latch, %E5%88%9D%E5%A7%8B%E5%8F%82%E6%95%B0%E6%98%AF10
+        test1();%0A    %7D%0A%0A%0A    public static void test1() %7B%0A
 %0A   
@@ -588,21 +588,21 @@
 tch(
-10
+2
 );%0A
+%0A
         
 for 
@@ -601,95 +601,675 @@
     
-for (int i = 0; i %3C 10; i++) %7B%0A            countDownLatch.countDown();%0A        %7D%0A%0A%0A    %7D
+Thread t1 = new Thread(new Runnable() %7B%0A            @Override%0A            public void run() %7B%0A                System.err.println(%22t1 done...%22);%0A                countDownLatch.countDown();%0A            %7D%0A        %7D);%0A%0A%0A        Thread t2 = new Thread(new Runnable() %7B%0A            @Override%0A            public void run() %7B%0A                System.err.println(%22t2 done...%22);%0A                countDownLatch.countDown();%0A            %7D%0A        %7D);%0A%0A        t1.start();%0A        t2.start();%0A%0A%0A        try %7B%0A            countDownLatch.await();%0A        %7D catch (InterruptedException e) %7B%0A            e.printStackTrace();%0A        %7D%0A        System.err.println(%22main done...%22);%0A%0A    %7D%0A
 %0A%7D%0A

update test