CountDownLatch的例子


public class StatsDemo {
final static SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");

final static String startTime = sdf.format(new Date());

public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(5);// 两个赛跑者
Stats stats1 = new Stats("任务A", 1000, latch);
Stats stats2 = new Stats("任务B", 2000, latch);
Stats stats3 = new Stats("任务C", 2000, latch);
Stats stats4 = new Stats("任务D", 2000, latch);
Stats stats5 = new Stats("任务E", 2000, latch);
stats1.start();//任务A开始执行
stats2.start();//任务B开始执行
stats3.start();//任务C开始执行
stats4.start();//任务D开始执行
stats5.start();//任务E开始执行
latch.await();// 等待所有人任务结束
System.out.println("所有的统计任务执行完成:" + sdf.format(new Date()));
}

static class Stats extends Thread {
String statsName;
int runTime;
CountDownLatch latch;

public Stats(String statsName, int runTime, CountDownLatch latch) {
this.statsName = statsName;
this.runTime = runTime;
this.latch = latch;
}

public void run() {
try {
System.out.println(statsName+ " do stats begin at "+ startTime);
//模拟任务执行时间
Thread.sleep(runTime);
System.out.println(statsName + " do stats complete at "+ sdf.format(new Date()));
latch.countDown();//单次任务结束,计数器减一
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
由于要同步返回统计数据,这里我们使用到了CountDownLatch类,它是Java5中新增的一个并发工具类,其使用非常简单,参考上面的伪代码给出了详细的使用步骤。

CountDownLatch用于同步一个或多个任务,强制他们等待由其他任务执行的一组操作完成。CountDownLatch典型的用法是将一个程序分为N个互相独立的可解决任务,并创建值为N的CountDownLatch。当每一个任务完成时,都会在这个锁存器上调用countDown,等待问题被解决的任务调用这个锁存器的await,将他们自己拦住,直至锁存器计数结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值