package thread;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(10);
for (int i = 0; i < 10; ++i) // create and start threads
new Thread(new Worker(startSignal, doneSignal)).start();
startSignal.countDown(); // let all threads proceed
doSomethingElse1();
doneSignal.await(); // wait
doSomethingElse2();
}
public static void doSomethingElse1(){
System.out.println("doing1...");
}
public static void doSomethingElse2(){
System.out.println("doing2...");
}
}
class Worker implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await();
doWork();
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
}
void doWork() { System.out.println("working......");}
}