jdk的concurrent包中的CountDownLatch类是一个线程同步的辅助类,它使得线程可以一直等待在其它线程中执行的操作,直到此操作结束。CountDownLatch在初始化的时候指定一个大小值N,调用CountDownLatch的await方法的线程会陷入等待之中,直到这个CountDownLatch对象的countDown方法被调用N次为止,无论是在一个线程中调用N次,还是在N个线程中被调用一次。只有这个对应的CountDownLatch对象的countDown方法总被调用次数为N次之后,这个等待的线程才能继续往下执行。
其原理也容易理解,初始化的时候指定要等待的计数的次数,每调用一次countDown就对这个计数减一,直到计数被减到0,等待的线程就可以继续运行了。
2、await
CountDownLatch的await方法会使得当前线程进入等待状态,直到最新的一次计数被减到0为止。如果当前的计数已经是0了,那么这个方法会马上返回。这个函数有个代参的重载函数,可以设置一个最长的等待时长。在等待时长内,如果计数器被减到0,这个函数会返回true,或者达到等待时长,这个函数会返回false。(被中断情况下抛异常)
3、countDown
使计数减一,初始化的计数不能重新设定,只能通过countDown来对计数减一
相关阅读:
Java Hashtable多线程操作遍历问题