CountDownLatch 阻塞队列使用

Latch:门闩的意思。根据该类名的意思,我们就可以知道该类在多线中扮演的就是一个倒数门闩的角色,怎么理解呢?
首先呢,我们新建一个CountDownLacth对象时我们需要给他传一个int参数,这个参数代表它将倒数的次数,也就是说调用几次countDown方法后,他就会对线程放行。
那放行是什么意思呢,就是某一个线程在执行的过程中如果遇到CountDownLatch对象的await方法时,他就会被卡住,即阻塞,无法执行下面的代码。然后别的线程可以拿到该CountDownLatch对象,调用countDown方法,每次调用倒数次数就会减少一次,直到倒数次数为0,不可重置,倒数结束之后门闩就会对线程放行,线程就会被唤醒,执行完await下面的代码。这样就完成一个倒数运行机制。
下面我们模拟一个做菜的一个过程,完成一盘肠粉需要两个步骤,一是执行白菜的准备,一是执行粉皮的准备,当两个步骤执行完了之后,服务员就可以通知上菜,下面我们根据代码了解倒数门闩机制。
public class CountDownLatchTest {
public static void main(String[] args){
CountDownLatch valve = new CountDownLatch(2);
Thread waiter = new Thread(new Runnable() {
@Override
public void run() {
try {
valve.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“肠粉做好啦”);
}
});
Thread caiOffer = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(“正在准备白菜”);
for(int i=0;i<3;i++){
System.out.println(“制作白菜中”);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(“白菜准备好啦”);
valve.countDown();
}
});
Thread fenOffer = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(“正在准备粉皮”);
for(int i=0;i<3;i++){
System.out.println(“粉皮制作中”);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(“粉皮准备好啦”);
valve.countDown();
}
});
waiter.start();
fenOffer.start();
caiOffer.start();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值