Java并发工具包CountDownLatch
CycliBarrier
Semaphore
Exchanger
CountDownLatch
相当一个计数器,new CountDownLatch(num)时设置等待的次数,允许一个或多个线程等待其他线程完成操作。 类似与thread.join()的方法。
常用方法:countDown() 计算器减一
await() 等待计算器数值为0
CycliBarrier
设置一道屏障,当指定数目的线程都到达屏障后,才会执行下一步。
常用方法:await() 告诉Cyclibarrier当前线程已经到达当线程数调用await()小于new CyclicBarrier(num)中指定的num时,所有线程都会一直等待
Semaphore
信号量,可以看作交通灯中绿灯,在一定时间内只能执行一定量的线程,控制并发数量,前面两个工具类是限定总的等待执行数,这个是控制并发量。
常用方法:acquire() 获取执行证
release() 释放执行证
应用场景:数据库连接资源十分珍贵有限,可以进行并发数量控制
在资源有限的场景,都可以进行信号限流控制
Exchanger
两个线程执行交换数据,如线程A中调用exchanger.exchange(String aa), 线程B中调用exchanger.exchange(String bb), 线程B获取到A的数据后,可以进行核对校验。如果只有一个线程调用exchange(), 线程会一直等待。