随笔记录
CountDownLatch用法
2015-11-1 diaba


CountDownLatch是一个同步辅助类



主要方法是:




public CountDownLatch(int count);
public void countDown();
public void await() throws InterruptedException








使用场景:



    当一组操作tasks完成后,才能执行任务taskB,该组操作tasks可以并发完成,没有先后顺序,但是taskB必须在tasks都完成之后才能开始执行。









实现上述业务场景的方法是:




//多个任务
String[] str = uuids.split(",");

//开启线程池
final ExecutorService threadPool = Executors.newFixedThreadPool(str.length);

//同步辅助类
final CountDownLatch latch = new CountDownLatch(str.length);

//每个任务单独启线程处理
for (final String uuid : str) {
Runnable run = new Runnable() {
@Override
public void run() {

try {
//执行tasks中任务
} catch (Exception e) {
//异常情况
}finally {
//执行完一个任务,即倒数
latch.countDown();
}
}
};
//使用线程池来执行任务
threadPool.submit(run);
}

try {
//等待所有任务完成,所有线程都执行countDown()操作,直到任务数全部执行完
latch.await();

//开始执行taskB任务
//TODO exec taskB
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
threadPool.shutdown();
}














发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容