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

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

实例如下:


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

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

猜你喜欢

  • Android 存储路径选择方法

    2022-04-03 21:05:42
  • java实现双色球机选号码生成器

    2022-10-05 07:41:33
  • 浅谈Android Studio如何Debug对应so文件C/C++代码

    2023-11-20 03:23:35
  • 结合mybatis-plus实现简单不需要写sql的多表查询

    2021-06-25 12:54:22
  • Java利用for循环打印菱形的实例教程

    2021-08-16 14:18:44
  • Android使用开源组件PagerBottomTabStrip实现底部菜单和顶部导航功能

    2023-07-02 11:32:40
  • 浅谈Spring Boot 开发REST接口最佳实践

    2021-10-08 12:24:35
  • 深入分析c# 继承

    2023-02-18 21:36:31
  • 快速了解如何在.NETCORE中使用Generic-Host建立主机

    2022-05-08 15:04:12
  • springboot默认日志框架选择源码解析(推荐)

    2021-06-19 08:02:51
  • C#编程实现动态改变配置文件信息的方法

    2022-05-01 15:09:25
  • Android自定义评分控件的完整实例

    2021-10-26 19:25:58
  • 在Android上实现HttpServer的示例代码

    2022-02-20 04:04:14
  • java springboot poi 从controller 接收不同类型excel 文件处理

    2023-10-17 14:26:05
  • springboot2+es7使用RestHighLevelClient的示例代码

    2023-11-25 01:23:18
  • 使用Springboot搭建OAuth2.0 Server的方法示例

    2023-01-28 07:19:16
  • C#将DataTable转换成list的方法

    2023-03-06 01:20:45
  • JDK 7 新特性小结实例代码解析

    2022-04-18 13:03:07
  • Java基于websocket协议与netty实时视频弹幕交互实现

    2023-08-16 11:55:46
  • C++类和对象之多态详解

    2023-05-10 18:52:03
  • asp之家 软件编程 m.aspxhome.com