闭锁的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,任何线程都不能够通过,当闭锁到达结束状态时,才会允许线程通过。闭锁可以确保一些活动在另一些活动结束后才执行。
举个例子:运动会时百米赛跑,每位运动员都是一个线程,在起跑线出准备冲刺。但是信号枪不响,所有的运动员都要呆在起跑线上不动。直到信号枪打响的一瞬间,运动员才能开始赛跑。这个信号枪就是闭锁。不同的是,闭锁可以设置一个数量。比如有五个裁判,分别拿一把信号枪。每个裁判都要鸣枪,且五个裁判全部打响后,运动员才能发力。
public class CountDownLatchTest {
public static void main(String[] args) {
final CountDownLatch startGate = new CountDownLatch(1);
for (int i = 0; i < 5; i++) {
Thread t = new Thread() {
@Override
public void run() {
try {
startGate.await();// 预备
} catch (InterruptedException e) {
return;
}
System.out.println("开始执行" + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行结束" + Thread.currentThread().getName());
}
};
t.start();
}
System.out.println("所有线程准备就绪...");
startGate.countDown();// 跑
}
}