作用:
CountDownLatch类可以使一个线程等待其他线程都执行完毕后再执行。
实现原理:
通过计数器来实现,计数器的初始值使线程的数量。每当一个线程执行完毕,计数器的数量就会-1,当计数器的数量为0的时候,表示线程已经执行完毕,然后在计数器锁上等待的线程就会被唤醒,开始执行。
主要方法:
1.构造方法:
CountDownLatch(int count)创建一个计数器对象,并且给定初始的计数值
2.await()方法:
当前线程等待,直到计数器的数量变为0,或者其他线程打断当前线程。
3.countDown():
减少计数器的数值,减为0的时候,释放所有的等待线程
锁存器具体使用方式代码
public void init(List<BudContractBaseInfo> list,
Date takingDate,
Date endDate,
Long budPrijectEditionId) throws Exception{
//设置CountDownLatch的值为list.size()
CountDownLatch countDownLatch = new CountDownLatch(list.size());
for(BudContractBaseInfo budContractBaseInfo:list){
//开启多线程执行
executor.execute(new Runnable() {
@Override
public void run() {
//每个线程执行完毕,锁存器数值-1
countDownLatch.countDown();
}
});
}
//调用await方法等待,直到锁存器数量为0,才继续往下执行
countDownLatch.await();