重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍了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父线程等待所有子线程退出的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!