欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-04-01 17:41:22
实例如下: static void testlock1(){ final atomicinteger waitcount = new atomi...

实例如下:

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的样子

以上这篇java父线程(或是主线程)等待所有子线程退出的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。