import java.util.concurrent.CountDownLatch;
public class ThreadTest {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDown = new CountDownLatch(1);
CountDownLatch await = new CountDownLatch(5);
// 依次创建并启动处于等待状态的5个MyRunnable线程
for (int i = 0; i < 200; ++i) {
new Thread(new MyRunnable(countDown, await,i)).start();
}
countDown.countDown();
await.await();
System.out.println("Bingo!");
}
}
class MyRunnable implements Runnable {
private final CountDownLatch countDown;
private final CountDownLatch await;
private final int num;
public MyRunnable(CountDownLatch countDown, CountDownLatch await,int num) {
this.num = num;
this.countDown = countDown;
this.await = await;
}
@Override
public void run() {
try {
countDown.await();//等待主线程执行完毕,获得开始执行信号...
System.out.println("处于等待的线程"+num+"开始自己预期工作......");
Thread.sleep(200);
await.countDown();//完成预期工作,发出完成信号...
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}