Java父线程(或是主线程)等待所有子线程退出的实例
实例如下:
staticvoidtestLock1(){
finalAtomicIntegerwaitCount=newAtomicInteger(30000);
finalObjectwaitObj=newObject();
System.out.println("start"+System.currentTimeMillis());
for(inti=0;i<30000;i++){
newThread(newRunnable(){
@Override
publicvoidrun(){
try{
Thread.sleep(10);
}catch(InterruptedExceptione){
e.printStackTrace();
}
waitCount.decrementAndGet();
synchronized(waitObj){
waitObj.notifyAll();
}
}
}).start();
}
while(waitCount.intValue()>0){
synchronized(waitObj){
if(waitCount.intValue()>0){
try{
waitObj.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
System.out.println("ok"+System.currentTimeMillis());
}
staticvoidtestLock2(){
finalCountDownLatchworkLauch=newCountDownLatch(30000);//计数器
System.out.println("start2"+System.currentTimeMillis());
for(inti=0;i<30000;i++){
newThread(newRunnable(){
@Override
publicvoidrun(){
try{
Thread.sleep(10);
}catch(InterruptedExceptione){
e.printStackTrace();
}
workLauch.countDown();
}
}).start();
}
try{
workLauch.await();
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("ok2"+System.currentTimeMillis());
}
publicstaticvoidmain(String[]args){
testLock1();
testLock2();
}
第一种是我随便写的实现,有点糙。第二种是朋友告知的一个类,java的concurrent中的,据说还有几个相似功能的类实现。这30000个线程时间差大概是不到200ms的样子
以上这篇Java父线程(或是主线程)等待所有子线程退出的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。