Java中并发常用工具类

来源于:https://blog.csdn.net/coderinchina/article/details/54914852

CountDownLatch
Semaphore(信号量)
Exchanger
CyclicBarrier

CountDownLatch

countDownLatch允许一个或多个线程等待其他线程完成操作。

通过构造函数来确定线程数
final CountDownLatch countDownLatch = new CountDownLatch(3); 
通过.countDown()来使同步计数器减1
countDownLatch.countDown();
通过.await()方法来阻塞当前线程,直到countDownLatch 的同步计数器为0。也可以await(long time)来限制最大等待时间。
countDownLatch.await();

semaphore

semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.这个跟队列有点。
在这里插入图片描述

通过构造函数来创建队列大小
final Semaphore semaphore = new Semaphore(2);
.acquire()入队
semaphore.acquire();  
.release()出队
semaphore.release();

Exchanger

Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,二个线程可以交换彼此的数据.在这二个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当二个线程都达到同步点时,这二个线程就可以交换数据,将本线程生产出来的数据传递给对方.

构造一个共享的exchanger
Exchanger<Integer> exchanger = new Exchanger<>();  
给两个线程交换数据
 exchanger.exchange(); 

CyclicBarrier

当有几个线程同时去访问,要阻塞,直到最后一个线程达到屏障时,程序才会继续执行。

通过构造函数设置阻塞的线程数量
CyclicBarrier barrier = new CyclicBarrier(num);
通过.await()来加入阻塞队列。
barrier.await(); //等待最后一个线程到达(底层会去判断)
最后.await()达到了num的数量,各个线程就会继续执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值