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

 更新时间:2017年11月24日 09:12:00   作者:牛孝祖  
下面小编就为大家分享一篇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的样子

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

相关文章

  • java8时间 yyyyMMddHHmmss格式转为日期的代码

    java8时间 yyyyMMddHHmmss格式转为日期的代码

    这篇文章主要介绍了java8时间 yyyyMMddHHmmss格式转为日期的代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java中数组在内存中存放原理的讲解

    Java中数组在内存中存放原理的讲解

    今天小编就为大家分享一篇关于Java中数组在内存中存放原理的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Java设计模式中的外观模式详解

    Java设计模式中的外观模式详解

    这篇文章主要介绍了Java设计模式中的外观模式详解,外观模式也叫“过程模式,外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
    2022-07-07
  • Java SSM整合开发统一结果封装详解

    Java SSM整合开发统一结果封装详解

    这篇文章主要介绍了Java SSM整合开发实现统一结果封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • java读取文件和写入文件的方式(简单实例)

    java读取文件和写入文件的方式(简单实例)

    下面小编就为大家带来一篇java读取文件和写入文件的方式(简单实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Mybatis超详细讲解构建SQL方法

    Mybatis超详细讲解构建SQL方法

    这篇文章主要为大家详细介绍了Mybatis构建SQL,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-07-07
  • Java 实现Redis存储复杂json格式数据并返回给前端

    Java 实现Redis存储复杂json格式数据并返回给前端

    这篇文章主要介绍了Java 实现Redis存储复杂json格式数据并返回给前端操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 浅谈Java基础知识之BigDecimal

    浅谈Java基础知识之BigDecimal

    我们又来回顾Java基础知识啦,今天讲的是BigDecimal的基本使用以及异常处理,下文中有非常详细的代码示例以及注释哦,需要的朋友可以参考下
    2021-05-05
  • SpringBootWeb 入门了解 Swagger 的具体使用

    SpringBootWeb 入门了解 Swagger 的具体使用

    这篇文章主要介绍了SpringBootWeb 入门了解 Swagger 的具体使用,Swagger 框架可以根据已经实现的方法或者类,通过页面的方式直观清晰的查看或者进行测试该方法,需要的朋友可以参考下
    2024-08-08
  • Java使用JMeter进行高并发测试

    Java使用JMeter进行高并发测试

    软件的压力测试是一种保证软件质量的行为,本文主要介绍了Java使用JMeter进行高并发测试,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论