java多线程-等候所有线程执行结束后再继续执行主线程
java多线程-等待所有线程执行结束后再继续执行主线程CountDownLatch,一个同步辅助类,在完成一组正在其他线
java多线程-等待所有线程执行结束后再继续执行主线程
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
主要方法
?public CountDownLatch(int count);
?public void?countDown();
?public void?await() throws?InterruptedException
?
构造方法参数指定了计数的次数
countDown方法,当前线程调用此方法,则计数减一
awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0
?
例子
Java代码??

- public?class?CountDownLatchDemo?{??
- ????final?static?SimpleDateFormat?sdf=new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");??
- ????public?static?void?main(String[]?args)?throws?InterruptedException?{??
- ????????CountDownLatch?latch=new?CountDownLatch(2);//两个工人的协作??
- ????????Worker?worker1=new?Worker("zhang?san",?5000,?latch);??
- ????????Worker?worker2=new?Worker("li?si",?8000,?latch);??
- ????????worker1.start();//??
- ????????worker2.start();//??
- ????????latch.await();//等待所有工人完成工作??
- ????????System.out.println("all?work?done?at?"+sdf.format(new?Date()));??
- ????}??
- ??????
- ??????
- ????static?class?Worker?extends?Thread{??
- ????????String?workerName;???
- ????????int?workTime;??
- ????????CountDownLatch?latch;??
- ????????public?Worker(String?workerName?,int?workTime?,CountDownLatch?latch){??
- ?????????????this.workerName=workerName;??
- ?????????????this.workTime=workTime;??
- ?????????????this.latch=latch;??
- ????????}??
- ????????public?void?run(){??
- ????????????System.out.println("Worker?"+workerName+"?do?work?begin?at?"+sdf.format(new?Date()));??
- ????????????doWork();//工作了??
- ????????????System.out.println("Worker?"+workerName+"?do?work?complete?at?"+sdf.format(new?Date()));??
- ????????????latch.countDown();//工人完成工作,计数器减一??
- ??
- ????????}??
- ??????????
- ????????private?void?doWork(){??
- ????????????try?{??
- ????????????????Thread.sleep(workTime);??
- ????????????}?catch?(InterruptedException?e)?{??
- ????????????????e.printStackTrace();??
- ????????????}??
- ????????}??
- ????}??
- ??????
- ???????
- }??
?
输出:
Worker zhang san do work begin at 2011-04-14 11:05:11
Worker li si do work begin at 2011-04-14 11:05:11
Worker zhang san do work complete at 2011-04-14 11:05:16
Worker li si do work complete at 2011-04-14 11:05:19
all work done at 2011-04-14 11:05:19