java 主线程 等待 子线程

来源:互联网 发布:calibre软件 编辑:程序博客网 时间:2024/06/04 19:46

问题描述:主线程开启1个子线程去做事情,之后主线程就无事可做了,但有必须等待子线程结束,其实可以让主线程结束,但是这样应该是不安全的。

 

 

无奈写了给while(true){

Thread.sleep(5000);

}

 

 

最近发现有更好的方法:使用java 的 CountDownLatch 类

    public class ImportThread extends Thread {
    private CountDownLatch threadsSignal;
    public ImportThread(CountDownLatch threadsSignal) {
    this.threadsSignal = threadsSignal;
    }
    @Override
    public void run() {
    System.out.println(Thread.currentThread().getName() + "开始...");
    //Do somethings
    threadsSignal.countDown();//线程结束时计数器减1
    System.out.println(Thread.currentThread().getName() + "结束. 还有" + threadsSignal.getCount() + " 个线程");
    }
    }
   

主线程

 

    CountDownLatch threadSignal = new CountDownLatch(threadNum);//初始化countDown
    for (int ii = 0; ii < threadNum; ii++) {//开threadNum个线程
    final Iterator<String> itt = it.get(ii);
    Thread t = new ImportThread(itt,sql,threadSignal);
    t.start();
    }
    threadSignal.await();//等待所有子线程执行完
    System.out.println(Thread.currentThread().getName() + "结束.");//打印结束标记