import java.util.concurrent.CountDownLatch;
class Driver {
void main() throws InterruptedException {
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(5); //等待5个线程 doneSignal.countDown();
for (int i = 0; i < 5; ++i)
new Thread(new Worker(startSignal, doneSignal)).start();
System.out.println("主线程控制Worker开始工作");
startSignal.countDown();
System.out.println("主线程工作");
System.out.println("主线程await等待worker完成任务");
doneSignal.await();
}
}
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 {
System.out.println("Worker等待主线程发令");
startSignal.await();
doWork();
System.out.println("Worker完成任务通知");
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
}
void doWork() { System.out.println("Worker开始工作"); }
}