【阻塞队列】-- CyclicBarrier源码解析(jdk1.8)

概述

CyclicBarrierCountDownLatch类似,它们都是阻塞一组线程直到某个事件的发生。CyclicBarrierCountDownLatch的关键区别在于,CyclicBarrier中的所有的线程必须同时达到屏蔽点才能继续执行,如果其中一个线程被中断,那么所有的等待的线程都会立刻被唤醒,并且抛出异常。而CountDownLatch中线程之间不会收到干扰。CyclicBarrier可以复用,每次打破屏障后,都会生成一个新的屏障,供下次使用,而CountDownLatch用一次之后就无效了。

【阻塞队列】-- Semaphore源码解析(jdk1.8)

概述

​ 上一篇我们解析了CountDownLatchSemaphoreCyclicBarrierCountDownLatch一样,都是基于AQS实现的同步工具类。Semaphore用来控制线程的并发,初始时会指定一个许可数permits,线程执行前需要获取许可,获取到许可后许可数-1,线程会向下执行,如果没有可用许可,就会被阻塞。直到其他线程执行完成释放许可后,被阻塞线程才会继续尝试获取许可。

CountDownLatch源码解析(jdk1.8)

概述

CountDownLatch是基于AQS实现的一个同步工具类。它允许一个线程一直等待,直到其他线程执行完成后再执行。CountDownLatch源码比较简单,基于AQS实现共享锁的等待 ,初始化时只需要设置一个初始值,后续针对锁的状态进行控制,最后根据锁的状态来释放等待线程即可。CountDownLatchCyclicBarrier不同,8.19是不可复用的,CountDownLatch释放等待线程后,就不能再次使用了。看此源码之前,建议先看AQS源码解析

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×