Java主线程等待子线程执行完毕-CountDownLatch
想做的一个程序如题,主要是想统计子线程都执行完毕所用的时间,网上搜索到了CountDownLatch这个类,这个工具类可以理解为计数器。在这里用于表示正在运行的线程数,当一个子线程结束的时候,将这个计数器减一,最后在主线程的一个地方等待子线程全部执行完毕,再继续运行等待后面的程序。写了个Demo程序,如下:
//子线程 public class SubThread extends Thread{ //子线程记数器,记载着运行的线程数 private CountDownLatch runningThreadNum; public SubThread(CountDownLatch runningThreadNum){ this.runningThreadNum = runningThreadNum; } @Override public void run() { System.out.println(Thread.currentThread().getName()+"-start"); System.out.println(Thread.currentThread().getName()+"-do something"); System.out.println(Thread.currentThread().getName()+"-end"); runningThreadNum.countDown();//正在运行的线程数减一 } }
//Main主线程 public class MainThread { public static void main(String[] args) throws InterruptedException { long startTime = System.currentTimeMillis(); int threadNum = 5; //线程数 //定义正在运行的线程数 CountDownLatch runningThreadNum = new CountDownLatch(threadNum); System.out.println(Thread.currentThread().getName()+"-start"); //创建多个子线程 for (int i = 0; i < threadNum; i++) { new SubThread(runningThreadNum).start(); } //等待子线程都执行完了再执行主线程剩下的动作 runningThreadNum.await(); System.out.println(Thread.currentThread().getName()+"-end"); long endTime = System.currentTimeMillis(); System.out.println("runningTime:"+(endTime-startTime)); } }
main-start Thread-0-start Thread-0-do something Thread-0-end Thread-1-start Thread-1-do something Thread-1-end Thread-2-start Thread-2-do something Thread-2-end Thread-4-start Thread-3-start Thread-4-do something Thread-3-do something Thread-4-end Thread-3-end main-end runningTime:16
看到打印的结果,满足我现在的要求。笔记下~~
2024年1月23日 20:31
JNANABHUMI AP provides all latest educational updates and many more. The main concept or our aim behind this website has been the will to provide resources full information on each topic which can be accessed through Internet. To ensure that every readers get’s what important and worthy about the topic they search and link to hear from us. jnanabhumiap.in Jnanabhumi AP is a startup by passionate webmasters and bloggers who have passion to provide engaging content which is accurate, interesting and worthy to read. We are mope like a web community where you can find different information’s, resources, topics on day to day incidents or news. We provide you the finest of web content on each and every topics possible with help of editorial and content team.