实例如下 :
static void testlock1 () {final atomicinteger waitcount = new Atomicinteger (30000); Окончательный объект waitObj = new Object (); System.out.println ("start"+System.currentTimeMillis ()); для (int i = 0; i <30000; i ++) {new Thread (new Runnable () {@override public void run () {try {thread.sleep (10);} catch (прерывание Exception e) {e.printstacktrace ();} waitCount.decRementAndget (); }).начинать(); } while (waitcount.intvalue ()> 0) {synchronized (waitObj) {if (waitCount.intvalue ()> 0) {try {waitObj.wait (); } catch (прерванное искусство e) {e.printstacktrace (); }}}} System.out.println ("OK"+System.CurrentTimeMillis ()); } static void testlock2 () {final countdownlatch horklauch = 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 (прерывание Expring e) {e.printstackTrace ();} worklauch.countdown ();}}). } try {worklauch.await (); } catch (прерванное искусство e) {e.printstacktrace (); } System.out.println ("ok2"+system.currenttimemillis ()); } public static void main (string [] args) {testlock1 (); testlock2 (); }第一种是我随便写的实现 , 有点糙。第二种是朋友告知的一个类 , java 的 параллельный 中的 , 据说还有几个相似功能的类实现。这 30000 个线程 时间差大概是不到 200 мс
以上这篇 java 父线程 (或是主线程) 等待所有子线程退出的实例就是小编分享给大家的全部内容了 , 希望能给大家一个参考 , 也希望大家多多支持武林网。