import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
public class TestCountDownLatch {
public static void main(String[] args) throws Exception{
CountDownLatch startSignal=new CountDownLatch(1);
CountDownLatch doneSignal=new CountDownLatch(10);
for(int i=0;i<10;i++){
new Thread(new Worker(startSignal,doneSignal)).start();
}
doSomethingElse();
startSignal.countDown();
doSomethingElse();
doneSignal.await();
}
static void doSomethingElse(){
System.out.println("doSomethingElse...");
}
}
//class Driver{
//
//}
class Worker implements Runnable{
Logger log=Logger.getLogger(Worker.class);
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker(CountDownLatch startSignal,CountDownLatch doneSignal){
this.startSignal=startSignal;
this.doneSignal=doneSignal;
}
@Override
public void run() {
try{
startSignal.await();
doWork();
doneSignal.countDown();
}catch(Exception e){
log.info(e);
}
}
void doWork(){
System.out.println("Worker is doing...");
}
}