实例如下:
โมฆะคงที่ testlock1 () {สุดท้าย Atomicinteger waitcount = ใหม่ Atomicinteger (30000); วัตถุสุดท้าย waitobj = วัตถุใหม่ (); System.out.println ("Start"+System.currentTimeMillis ()); สำหรับ (int i = 0; i <30000; i ++) {เธรดใหม่ (ใหม่ runnable () {@Override โมฆะสาธารณะเรียกใช้ () {ลอง {thread.sleep (10);} catch (interruptedException e) {e.printstacktrace () }).เริ่ม(); } ในขณะที่ (waitcount.intValue ()> 0) {ซิงโครไนซ์ (waitobj) {ถ้า (waitcount.intValue ()> 0) {ลอง {waitobj.wait (); } catch (interruptedException e) {e.printStackTrace (); }}}} system.out.println ("ตกลง"+System.currentTimeMillis ()); } โมฆะคงที่ testlock2 () {สุดท้าย Countdownlatch worklauch = ใหม่ Countdownlatch (30000); // 计数器 system.out.println ("start2"+system.currenttimeMillis ()); สำหรับ (int i = 0; i <30000; i ++) {เธรดใหม่ (ใหม่ runnable () {@Override โมฆะสาธารณะเรียกใช้ () {ลอง {thread.sleep (10);} catch (interruptedException e) {e.printstacktrace ();} worklauch.countdown () } ลอง {worklauch.await (); } catch (interruptedException e) {e.printStackTrace (); } system.out.println ("OK2"+System.currentTimeMillis ()); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testlock1 (); testlock2 (); -第一种是我随便写的实现, 有点糙。第二种是朋友告知的一个类, Java 的พร้อมกัน中的, 据说还有几个相似功能的类实现。这 30000 个线程 200ms 的样子
以上这篇 Java 父线程 (或是主线程) 等待所有子线程退出的实例就是小编分享给大家的全部内容了, 希望能给大家一个参考, 也希望大家多多支持武林网。