1.CountDownLatch
作用:一组线程等待其他线程执行完成后,再执行任务。类似join方法
调用await方法等待,countdown方法让数量减一
2.CyclicBarrier
作用:一组线程到达某个状态后等待,知道线程组内最后一个线程到达后,再继续执行。
这里有个方法额外说明下:public CyclicBarrier(int parties, Runnable barrierAction) ,这个是线程都到达指定状态后,执行参数内任务,这里是从这组线程中选择一个去执行。
和CountDownLatch的不同:
- CyclicBarrier可以重复使用,CountDownLatch不行
- countdownlatch放行由第三者控制,CyclicBarrier放行由一组线程本身控制
- countdownlatch放行条件>=线程数,CyclicBarrier放行条件=线程数
3.Semaphore
信号量,可以控制访问资源的线程数,可用于流量控制。acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
4.Exchange
用于两个线程交换数据,交换完数据后才继续执行
5.Callable、Future和FutureTask
FutureTask 实现了Runnable接口,内部包含一个Callable。
- isDone():任务结束,不管正常还是异常结束,或者是任务取消,都返回true
- isCancelled :任务完成前被取消,返回true
- cancel(boolean):任务还未开始,返回false。任务已经结束,返回false。任务正在运行,cancel(true)将会尝试中断正在执行的任务,返回true。cancel(false)不会中断正在执行的任务,返回true。