A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.
public class TestCountDownLatch {
public TestCountDownLatch() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// 开始的倒数锁
final CountDownLatch begin = new CountDownLatch(1);
// 结束的倒数锁
final CountDownLatch end = new CountDownLatch(10);
// 十名选手
final ExecutorService exec = Executors.newFixedThreadPool(10);
for (int index = 0; index < 10; index++) {
final int NO = index + 1;
Runnable run = new Runnable() {
public void run() {
try {
// 如果当前计数为零,则此方法立即返回。
// 等待
begin.await();
long spendTime = (long) (Math.random() * 10000);
Thread.sleep(spendTime);
System.out.println("No." + NO + " arrived spendTime:"+spendTime);
} catch (InterruptedException e) {
} finally {
// 每个选手到达终点时,end就减一
end.countDown();
}
}
};
exec.submit(run);
}
System.out.println("Game Start");
// begin减一,开始游戏
begin.countDown();
// 等待end变为0,即所有选手到达终点
try {
System.out.println("line up ----------");
end.await();
System.out.println("line down and all run over ----------");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Game Over");
exec.shutdown();
}
}