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......");} }