线程十五:CountDownLatch

CountDownLatch是jdk1.5之后引入的一个同步器应用类,它的作用能够使一个线程一直等待直到其他线程完成任务后再继续执行。CountDownLatch通常也被叫做门闩,意思是它会导致一条或多条线程一直在门口等待,直到一条线程打开这个门,其他线程才得以继续执行。

我们可以通过构造器CountDownLatch(int count)来构造一个CountDownLatch的实例,其中count代表着计数个数,当这个计数个数变成0时,线程就可以继续执行了。如果在构造器调用的时候,为count赋值为负数,那么系统会抛出IllegalArgumentException异常。

CountDownLatch提供了以下几个方法来完成具体的操作:1.await方法会强制调用线程一直等到计数个数为0,如果被中断会抛出InterruptedException异常。2.await(long timeout,TimeUnit unit)方法会在参数指定的时间内一直强制调用线程等待,直到计数个数为0,如果被中断会抛出InterruptedException异常。3.countDown方法的作用是递减计数个数,当计数个数为0时,系统释放所有等待线程。4.getCount方法会返回当前的计数个数,通常用于测试和调试程序。

为了描述CountDownLatch的应用,我们看一个实例:

例子中创建了三个线程,为了演示的需要,我在每个线程的run方法中调用了sleep方法,当三个任务都执行完毕并有效调用了countDown方法之后,系统的主线程得以继续执行。

CountDownLatch通常用在以下场景:1.当需要多个线程同时执行并发任务,实现最大程度的并发时可以使用CountDownLatch。2.当在某个线程运行之前需要多个线程完成各自任务的情况下。

参考链接

猜你喜欢

转载自blog.csdn.net/qq_34479912/article/details/82726562