首先jdk 定义
CountDownLatch:
允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。
A CountDownLatch
用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await
调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用CyclicBarrier 。
A CountDownLatch
是一种通用的同步工具,可用于多种用途。 一个CountDownLatch
为一个计数的CountDownLatch用作一个简单的开/关锁存器,或者门:所有线程调用await在门口等待,直到被调用countDown()的线程打开。 一个CountDownLatch
初始化N可以用来做一个线程等待,直到N个线程完成某项操作,或某些动作已经完成N次。
CountDownLatch
一个有用的属性是,它不要求调用countDown
线程等待计数到达零之前继续,它只是阻止任何线程通过await ,直到所有线程可以通过。
构造方法:
Constructor and Description |
---|
CountDownLatch(int count) 构造一个以给定计数 |
Modifier and Type | Method and Description |
---|---|
void | await() 导致当前线程等到锁存器计数到零,除非线程是 interrupted 。 |
boolean | await(long timeout, TimeUnit unit) 使当前线程等待直到锁存器计数到零为止,除非线程为 interrupted或指定的等待时间过去。 |
void | countDown() 减少锁存器的计数,如果计数达到零,释放所有等待的线程。 |
long | getCount() 返回当前计数。 |
String | toString() 返回一个标识此锁存器的字符串及其状态。 |
最后上代码:
代码示范:
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
//初始化计数器
CountDownLatch countDownLatch=new CountDownLatch(6);
new Thread(()->{
for(int a=0;a<6;a++){
System.out.println(a);
countDownLatch.countDown(); //计数器减一
}
}).start();
countDownLatch.await(); //计数器归零往下处理
System.out.println("结束了");
}
细节:
CountDownLatch.countDown() ----数量减一
countDownLatch.await(); -----当数量为零,被唤醒
下一个辅助类:CyclicBarrier