Java多线程------让主线程等待所有子线程执行完毕

发表于:2012-5-02 10:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

    public class MyCountDown {
    private int count;
    public MyCountDown(int count){
    this.count = count;
    }
    public synchronized void countDown(){
    count--;
    }
    public synchronized boolean hasNext(){
    return (count > 0);
    }
    public int getCount() {
    return count;
    }
    public void setCount(int count) {
    this.count = count;
    }
    }

  ImportThread类

public class ImportThread extends Thread {   
  1. private MyCountDown c;   
  2. public ImportThread(MyCountDown c) {   
  3. this.c = c;   
  4. }   
  5. @Override  
  6. public void run() {   
  7. System.out.println(Thread.currentThread().getName() + "开始...");//打印开始标记  
  8. //Do something   
  9. c.countDown();//计时器减1   
  10. System.out.println(Thread.currentThread().getName() + "结束. 还有" + c.getCount() + " 个线程");//打印结束标记  
  11. }   
  12. }

    public class ImportThread extends Thread {
    private MyCountDown c;
    public ImportThread(MyCountDown c) {
    this.c = c;
    }
    @Override
    public void run() {
    System.out.println(Thread.currentThread().getName() + "开始...");//打印开始标记
    //Do something
    c.countDown();//计时器减1
    System.out.println(Thread.currentThread().getName() + "结束. 还有" + c.getCount() + " 个线程");//打印结束标记
    }
    }

  主线程中

System.out.println(Thread.currentThread().getName() + "开始");//打印开始标记  
  1. MyCountDown c = new MyCountDown(threadNum);//初始化countDown  
  2. for (int ii = 0; ii < threadNum; ii++) {//开threadNum个线程  
  3. Thread t = new ImportThread(c);   
  4. t.start();   
  5. }   
  6. while(true){//等待所有子线程执行完  
  7. if(!c.hasNext()) break;   
  8. }   
  9. System.out.println(Thread.currentThread().getName() + "结束.");//打印结束标记

    System.out.println(Thread.currentThread().getName() + "开始");//打印开始标记
    MyCountDown c = new MyCountDown(threadNum);//初始化countDown
    for (int ii = 0; ii < threadNum; ii++) {//开threadNum个线程
    Thread t = new ImportThread(c);
    t.start();
    }
    while(true){//等待所有子线程执行完
    if(!c.hasNext()) break;
    }
    System.out.println(Thread.currentThread().getName() + "结束.");//打印结束标记

43/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号