现在的位置: 首页 > 综合 > 正文

Java:主线程和子线程—–主线程等待子线程结束

2014年09月05日 ⁄ 综合 ⁄ 共 1362字 ⁄ 字号 评论关闭

想做的一个程序如题,主要是想统计子线程都执行完毕所用的时间,网上搜索到了CountDownLatch这个类,这个工具类可以理解为计数器。在这里用于表示正在运行的线程数,当一个子线程结束的时候,将这个计数器减一,最后在主线程的一个地方等待子线程全部执行完毕,再继续运行等待后面的程序。写了个Demo程序,如下:

 

//子线程

public class SubThread extends Thread{

 

    //子线程记数器,记载着运行的线程数

    private CountDownLatchrunningThreadNum;

 

    publicSubThread(CountDownLatch runningThreadNum){

        this.runningThreadNum= runningThreadNum;

    }

     

    @Override

    public void run() {

        System.out.println(Thread.currentThread().getName()+"-start");

        System.out.println(Thread.currentThread().getName()+"-dosomething");

        System.out.println(Thread.currentThread().getName()+"-end");

        runningThreadNum.countDown();//正在运行的线程数减一

    }

}

 

//Main主线程

public class MainThread {

  public static void main(String[] args)throws InterruptedException {

        longstartTime = System.currentTimeMillis();

        intthreadNum = 5; //线程数

        //定义正在运行的线程数

        CountDownLatchrunningThreadNum = new CountDownLatch(threadNum);

        System.out.println(Thread.currentThread().getName()+"-start");

        //创建多个子线程

        for(int i = 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));

    }

}

抱歉!评论已关闭.