首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java多线程-等候所有线程执行结束后再继续执行主线程

2013-08-11 
java多线程-等待所有线程执行结束后再继续执行主线程CountDownLatch,一个同步辅助类,在完成一组正在其他线

java多线程-等待所有线程执行结束后再继续执行主线程

CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

主要方法

?public CountDownLatch(int count);

?public void?countDown();

?public void?await() throws?InterruptedException
?

构造方法参数指定了计数的次数

countDown方法,当前线程调用此方法,则计数减一

awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0

?

例子

Java代码??java多线程-等候所有线程执行结束后再继续执行主线程
  1. public?class?CountDownLatchDemo?{??
  2. ????final?static?SimpleDateFormat?sdf=new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");??
  3. ????public?static?void?main(String[]?args)?throws?InterruptedException?{??
  4. ????????CountDownLatch?latch=new?CountDownLatch(2);//两个工人的协作??
  5. ????????Worker?worker1=new?Worker("zhang?san",?5000,?latch);??
  6. ????????Worker?worker2=new?Worker("li?si",?8000,?latch);??
  7. ????????worker1.start();//??
  8. ????????worker2.start();//??
  9. ????????latch.await();//等待所有工人完成工作??
  10. ????????System.out.println("all?work?done?at?"+sdf.format(new?Date()));??
  11. ????}??
  12. ??????
  13. ??????
  14. ????static?class?Worker?extends?Thread{??
  15. ????????String?workerName;???
  16. ????????int?workTime;??
  17. ????????CountDownLatch?latch;??
  18. ????????public?Worker(String?workerName?,int?workTime?,CountDownLatch?latch){??
  19. ?????????????this.workerName=workerName;??
  20. ?????????????this.workTime=workTime;??
  21. ?????????????this.latch=latch;??
  22. ????????}??
  23. ????????public?void?run(){??
  24. ????????????System.out.println("Worker?"+workerName+"?do?work?begin?at?"+sdf.format(new?Date()));??
  25. ????????????doWork();//工作了??
  26. ????????????System.out.println("Worker?"+workerName+"?do?work?complete?at?"+sdf.format(new?Date()));??
  27. ????????????latch.countDown();//工人完成工作,计数器减一??
  28. ??
  29. ????????}??
  30. ??????????
  31. ????????private?void?doWork(){??
  32. ????????????try?{??
  33. ????????????????Thread.sleep(workTime);??
  34. ????????????}?catch?(InterruptedException?e)?{??
  35. ????????????????e.printStackTrace();??
  36. ????????????}??
  37. ????????}??
  38. ????}??
  39. ??????
  40. ???????
  41. }??

?

输出:

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

热点排行