Java常用的并发工具类:CountDownLatch、CyclicBarrier、Semaphore、Exchanger

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线程间的数据交换

提供一个同步点,在这个同步点,两个线程可以交换彼此的数据

猜你喜欢

转载自www.cnblogs.com/blackdd/p/12522692.html
今日推荐