java多线程系列8 高级同步工具(2)CountDownLatch
CountDownLatch,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,
计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,
然后在闭锁上等待的线程就可以恢复执行任务。
应用场景:多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工作结束后,才能开始。
举个例子,开启多个线程分块处理很多数据,每个线程只处理一部分,最后由另外一个线程来汇总,
那么这时候我们可以考虑使用CountDownLatch来控制并发。
public class CountDownTest implements Runnable { static CountDownLatch countDownLatch = new CountDownLatch(3); @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " 完成一部分"); countDownLatch.countDown(); } public static void main(String[] args) { CountDownTest t = new CountDownTest(); ExecutorService srev = Executors.newCachedThreadPool(); for (int i = 0; i < 3; i++) { srev.submit(t); } try { countDownLatch.await(); // 及时通知 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("汇总完成"); } }
运行结果如下 await() 后面的代码只有countDown() 到0 才会执行
posted on 2017-05-25 18:45 一只小蜗牛12138 阅读(209) 评论(0) 编辑 收藏 举报