知识总结-Java并发之CountDownLatch、CyclicBarrier、Semaphore

CountDownLatch

使一个或者多个线程等待直到其他N个线程执行完成,初始化一个count,当这个count变成0的时候,会唤醒等待的线程,注意这个count不能被重置,调用countDown方法,count就会减一。需要等待的线程调用await方法使自己阻塞等待,其他线程通过调用countDown方法将count减一,直到count=0,阻塞等待的线程就恢复继续执行。

知识总结-Java并发之CountDownLatch、CyclicBarrier、Semaphore


知识总结-Java并发之CountDownLatch、CyclicBarrier、Semaphore

输出结果

知识总结-Java并发之CountDownLatch、CyclicBarrier、Semaphore

CyclicBarrier

初始化N个数量,使一组线程互相等待直到某个条件触发,直到所有线程都到达某个条件点。每个线程通过调用await方法使自己阻塞,等到所有线程都调用await方法之后,所有在等待的线程都会恢复继续执行。

知识总结-Java并发之CountDownLatch、CyclicBarrier、Semaphore


知识总结-Java并发之CountDownLatch、CyclicBarrier、Semaphore

输出结果

知识总结-Java并发之CountDownLatch、CyclicBarrier、Semaphore

Semaphore

初始化N个许可,同时最多只能有N个线程拥有这些许可,否则会阻塞,经常用来控制某些重要资源的并发访问量。某个线程通过调用acquire方法获取许可,如果获取不到会阻塞等待。调用tryAcquire方法尝试获取许可,不会阻塞当前线程,调用release方法释放许可,这样别的线程才能获取许可。



分享到:


相關文章: