软件编程
位置:首页>> 软件编程>> java编程>> Java父线程(或是主线程)等待所有子线程退出的实例

Java父线程(或是主线程)等待所有子线程退出的实例

作者:牛孝祖  发布时间:2022-10-23 16:25:50 

标签:Java父线程,主线程,等待,子线程

实例如下:


static void testLock1(){

final AtomicInteger waitCount = new AtomicInteger(30000);
  final Object waitObj = new Object();
  System.out.println("start"+System.currentTimeMillis());
  for (int i=0;i<30000;i++) {
   new Thread(new Runnable() {
    @Override
    public void run() {
     try {
      Thread.sleep(10);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     waitCount.decrementAndGet();
     synchronized(waitObj){
      waitObj.notifyAll();
     }
    }
   }).start();
  }
  while( waitCount.intValue()>0) {
   synchronized (waitObj) {
    if(waitCount.intValue()>0){
     try {
      waitObj.wait();
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   }
  }
  System.out.println("ok"+System.currentTimeMillis());
 }
 static void testLock2(){

final CountDownLatch workLauch = new CountDownLatch(30000);//计数器
  System.out.println("start2"+System.currentTimeMillis());
  for (int i=0;i<30000;i++) {
   new Thread(new Runnable() {
    @Override
    public void run() {
     try {
      Thread.sleep(10);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     workLauch.countDown();
    }
   }).start();
  }
  try {
   workLauch.await();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  System.out.println("ok2"+System.currentTimeMillis());
 }
 public static void main(String[] args) {
  testLock1();
  testLock2();
 }

第一种是我随便写的实现,有点糙。第二种是朋友告知的一个类,java的concurrent中的,据说还有几个相似功能的类实现。这30000个线程 时间差大概是不到200ms的样子

来源:http://www.cnblogs.com/niuxiaozu/p/5973937.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com