* 同步计数器
* 作用:同步N个线程执行
* 1 一个问题分为N个部分一起执行,执行完毕然后汇总
* @author root
*
* 场景设想:
* 有10个沙包,10个人来运送
* 当每人都运送完毕,则整个运送完毕
public class CountDownLatchTest2 { public static void main(String[] args) { //所有线程执行完毕标识 CountDownLatch allEndFlag = new CountDownLatch(10); try { for(int i=0;i<10;i++){ Thread.sleep(500);//利用sleep,说明工人开始时间不同 SlaveThread2 worker = new SlaveThread2( allEndFlag,i); worker.start(); } } catch (InterruptedException e1) { e1.printStackTrace(); } try { allEndFlag.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主任务完成。。"); } } //工人类 class SlaveThread2 extends Thread{ //工人编号 private Integer number ; //当前工人用力完毕 则减一 private CountDownLatch allEndFlag; public SlaveThread2( CountDownLatch allEndFlag , int number){ this.number = number ; this.allEndFlag = allEndFlag ; } @Override public void run() { long start = System.currentTimeMillis() ; System.out.println( "工人+"+number+"起止时间"+start); takeUp() ; //当前工人用力完毕,结束 allEndFlag.countDown(); System.out.println( "工人"+number+"完成"); } //抬起 public void takeUp(){ try { //抬起箱子总共花费时间 3s Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }