1、CountDownLatch 等待多线程完成
它的构造函数接收一个int参数作为计数器,想等待N个点,就传入N。当调用CountDownLatch的countDown()方法时,N就会减1,直至减为0。
使用await()方法等待,当N的值变为0时,执行await的线程继续执行
2、CyclicBarrier 同步屏障(可以理解为可循环的屏障)
可循环使用的屏障,它要做的事情就是让一组线程到达屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会打开,所有被阻塞的线程才会继续执行;
默认构造方法接收一个int参数,表示屏障拦截的线程数,每个线程调用await方法告诉CyclicBarrier 已经达到屏障了,然后当前线程阻塞。
3、CountDownLatch VS CyclicBarrier
CountDownLatch的计数器只使用一次,而CyclicBarrier 的计数器可以Reset方法重置,重复使用
4、Semaphore 控制线程并发数的信号量
控制有限个线程使用资源。构造方法接收一个int参数N,表示最大并发量,每个线程使用资源前调用acquire()方法获取权限,使用完后调用release()方法释放权限;
5、Exchanger线程间的数据交换
提供一个同步点,在这个同步点,两个线程可以交换彼此的数据
Java常用的并发工具类:CountDownLatch、CyclicBarrier、Semaphore、Exchanger
原文:https://www.cnblogs.com/blackdd/p/12522692.html