CountDownLatch,CyclicBarrier,Semaphore

CountDownLatch 的await可以阻塞一个线程,等待全部countdown完毕,则跳过wait

CyclicBarrier 阻塞多个线程,执行完毕后返回自身runnable

Semaphore 信号量通过信号量阻塞多个线程,等待已经获取信号的线程释放线程后,其他线程才可以获取,以及执行

使用方式

 ```
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(5);
        for (int i = 0; i < 5; i++) {
            final int value = i;
            new Thread(() -> {
                System.out.println("很开心" + value);
                countDownLatch.countDown();
            }).start();
        }
        countDownLatch.await();
        System.out.println("countDownLatch 完毕");
<pre><code>    CyclicBarrier cyclicBarrier = new CyclicBarrier(5, () -&gt; {
        System.out.println("cyclicBarrier 收集完毕");
    });
    for (int i = 0; i &lt; 5; i++) {
        final int value = i;
        new Thread(() -&gt; {
            System.out.println("很开心" + value);
            try {
                cyclicBarrier.await();
                System.out.println(Thread.currentThread().getName() + "我完成了");
            } catch (InterruptedException | BrokenBarrierException e) {
                e.printStackTrace();
            }
        }).start();
    }

    Semaphore semaphore = new Semaphore(4);

    for (int i = 0; i &lt; 5; i++) {
        new Thread(() -&gt; {
            try {
                semaphore.acquire(2);
                System.out.println(Thread.currentThread().getName() + "爷来了");
                Thread.sleep(100);
                System.out.println(Thread.currentThread().getName() + "活干完了");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                semaphore.release(2);
            }

        }).start();
    }

}

}


结果

```java
很开�?2
很开�?4
很开�?0
很开�?3
很开�?1
countDownLatch 完毕
很开�?0
很开�?1
很开�?3
很开�?4
很开�?2
cyclicBarrier 收集完毕
Thread-7我完成了
Thread-5我完成了
Thread-8我完成了
Thread-6我完成了
Thread-9我完成了
Thread-10爷来�?
Thread-12爷来�?
Thread-10活干完了
Thread-12活干完了
Thread-13爷来�?
Thread-11爷来�?
Thread-13活干完了
Thread-11活干完了
Thread-14爷来�?
Thread-14活干完了
```</code></pre><p style=""></p>