Java父线程(或是主线程)等待所有子线程退出的实例
程序员文章站
2023-12-15 16:32:28
实例如下:
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父线程(或是主线程)等待所有子线程退出的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。