Java主线程等候子线程执行完毕-CountDownLatch
Java主线程等待子线程执行完毕-CountDownLatch主线程:?[java] view plaincopyprint?//Main主线程??publicc
Java主线程等待子线程执行完毕-CountDownLatch
主线程:
?
[java] view plaincopyprint?
- //Main主线程??
- publicclassMainThread?{???
- ???
- ????publicstaticvoid?main(String[]?args)?throwsInterruptedException?{???
- ????????longstartTime?=?System.currentTimeMillis();???
- ????????intthreadNum?=?5;//线程数??
- ????????//定义正在运行的线程数??
- ????????CountDownLatch?runningThreadNum?=?newCountDownLatch(threadNum);??
- ????????System.out.println(Thread.currentThread().getName()+"-start");??
- ????????//创建多个子线程??
- ????????for(inti?=?0;?i?<?threadNum;?i++)?{???
- ????????????newSubThread(runningThreadNum).start();??
- ????????}??
- ????????//等待子线程都执行完了再执行主线程剩下的动作??
- ????????runningThreadNum.await();??
- ????????System.out.println(Thread.currentThread().getName()+"-end");??
- ????????longendTime?=?System.currentTimeMillis();???
- ????????System.out.println("runningTime:"+(endTime-startTime));??
- ????}??
- }??
?
子线程:
?
[java]?view plaincopyprint?
- //子线程??
- publicclassSubThread?extendsThread{??
- ???
- ????//子线程记数器,记载着运行的线程数??
- ????privateCountDownLatch?runningThreadNum;???
- ???
- ????publicSubThread(CountDownLatch?runningThreadNum){???
- ????????this.runningThreadNum?=?runningThreadNum;???
- ????}??
- ???????
- ????@Override??
- ????publicvoidrun()?{???
- ????????System.out.println(Thread.currentThread().getName()+"-start");??
- ????????System.out.println(Thread.currentThread().getName()+"-do?something");??
- ????????System.out.println(Thread.currentThread().getName()+"-end");??
- ????????runningThreadNum.countDown();//正在运行的线程数减一??
- ????}??
- }??