CountDownLatch是jdk1.5版本之后的并发包中提供的可以实现join类似功能的实现类,比join的功能更多,使用更方便。
CountDownLatch直接一个int类型的参数构成作为计算器,,然后我们通过CountDownLatch的引用调用countDown方法,计算器就会减1。而主线程则通过CountDownLatch提供的await方法进行阻塞,等待计数器减为0之后,则主线程停止阻塞,继续运行。当然如果主线程不想永远傻等下去,也可以传入超时时间和时间单位参数,等待超时时间结束后,主线程依旧可以继续运行。
public class CountDownTest {
static CountDownLatch latch = new CountDownLatch(3);
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" count "+1);
latch.countDown();
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" count "+2);
latch.countDown();
}
},"countDown-Thread");
t.start();
System.out.println(Thread.currentThread().getName()+" count "+3);
latch.countDown();
latch.await(1,TimeUnit.SECONDS);
System.out.println(Thread.currentThread().getName()+" 执行完成 ");
}
}