CountDownLatch:使一个线程等待其他线程各自执行完毕后再执行。
通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作。示例代码如下:
/**
* @author luffy
**/
public enum CountryEnum {
ONE(0,"A"),TWO(1,"B"),THREE(2,"C");
@Getter private int key;
@Getter private String country;
CountryEnum(int key, String country) {
this.key = key;
this.country = country;
}
public static CountryEnum getCountry(int key){
for (CountryEnum element : CountryEnum.values()) {
if( element.getKey() == key){
return element;
}
}
return null;
}
}
/**
* @author luffy
**/
public class CountDownLatchDemo {
public static void main(String[] args){
CountDownLatch countDownLatch = new CountDownLatch(3); //计数器-倒计数
for(int i =0 ;i< 3;i++){
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"上完自习,离开教室");
countDownLatch.countDown(); //计数器-1
},CountryEnum.getCountry(i).getCountry()).start();
}
try {
countDownLatch.await(); //阻塞直至计数器归零
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"*********班长最后关门");
}
}
允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。
//等待超时-继续执行
public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };
网友评论