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();
}



标签: CountDownLatch 线程同步 任务同步

发表评论:

Powered by emlog 京ICP备15045175号-1 Copyright © 2022