java倒计时器_Java并发系列5--倒计时器CountDownLatch

本文介绍了CountDownLatch在多线程场景中的应用,通过实例演示如何在所有小任务完成后启动大任务。它通过一个构造函数设置任务数量,`countDown()`用于减数计时,`await()`使任务阻塞直到倒计时结束。
摘要由CSDN通过智能技术生成

今天讲一个倒计时器工具,叫CountDownLatch。需要这个工具的场景大概有:当所有的小任务都完成之后,再启动大任务。

先看代码:

public class CountDownLatchDemo {

static final CountDownLatch LATCH = new CountDownLatch(10);

public static class Task implements Runnable {

final static AtomicInteger incr = new AtomicInteger();

@Override

public void run() {

try {

Thread.sleep(new Random().nextInt(10)*100);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("火箭检测任务-" + incr.getAndIncrement() + " 完成");

LATCH.countDown();

}

}

public static void main(String[] args) throws InterruptedException {

ExecutorService executorService = Executors.newFixedThreadPool(10);

for (int i = 0; i < 10; i++) {

executorService.execute(new Task());

}

LATCH.await();

System.out.println("发射火箭");

executorService.shutdown();

}

}

这里模拟了火箭发射的场景,所有预备任务完成,才能发射火箭。

CountDownLatch比较简单,一个构造加上两个主要方法:

构造函数需要入参一个总数,表示有几个小任务需要执行

countDown() 每次执行完小任务都要调用这个方法,用来倒计时

await() 没有倒计时到0,就会一直阻塞。当倒计时完成,则继续执行后续代码

转载至链接:https://my.oschina.net/lizaizhong/blog/1833536

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值