类 | 作用 |
---|---|
semaphore | 限制线程数量 |
exchanger | 两个线程交换数据 |
countdownlatch | 递减屏障,线程等待直到计数器减为0时开始工作 |
cyclicbarrier | 循环屏障,等屏障的线程数达到初始化值时,执行自定义的任务 |
phaser | 增强的cyclicbarrier |
countdownlatch和cyclicbarrier区别
countdownlatch:递减屏障,调用构造方法时指定初始值count,这个初始值其实是父类AQS维护的一个private volatile int state类型的共享变量,这个变量在使用countdownlatch的多个线程间共享,且volatile关键字保证了该变量修改可见性,它只能设置一次,调用countdownlatch.await()方法的线程需要闭锁等待初始值减少到0时(调用countdown()方法递减state变量值),才可以继续执行。
cyclicbarrier:循环屏障,调用构造方法时指定初始值parties和自定义任务,初始值设置后,可以通过reset()方法重置为初始值,当循环屏障中的线程数等于parties(实际上是调用await()方法递减,直到初始值为0)时,触发自定义任务执行,本质上基于Lock + Condition实现的等待/通知模式。