美文网首页
JUC-CountDownLatch

JUC-CountDownLatch

作者: GIT提交不上 | 来源:发表于2020-03-03 17:41 被阅读0次

  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 { };

相关文章

  • JUC-CountDownLatch

    一、CountDownLatch是什么? 是闭锁 二、CountDownLatch有什么用途? 用途1:m个线程等...

  • JUC-CountDownLatch

      CountDownLatch:使一个线程等待其他线程各自执行完毕后再执行。  通过一个计数器来实现的,计数器的...

  • JUC-CountDownLatch和CyclicBarrier

    CountDownLatch等待多线程完成,该工具类适用于主线程等待其他子线程结束后再执行的场景 运行结果 第二个...

网友评论

      本文标题:JUC-CountDownLatch

      本文链接:https://www.haomeiwen.com/subject/yhdqlhtx.html