门闩CountDownLatch

挂多把锁,当所有的锁都释放掉后 才执行

  • 可以和锁混合使用,或替代锁的功能。
  • 在门闩未完全开放之前等待。当门闩完全开放后执行。
  • 避免锁的效率低下问题。

一般用于有前后顺序的地方 ,比如spring 容器初始化,要先初始化什么 再初始化什么,然后在做什么事情; 每次做完一件事后 就减(释放)去一把锁

public class TestSync { 
    
    //门闩 相当于 挂5把锁 ,当这5把锁一次都 释放时 才执行
    CountDownLatch latch = new CountDownLatch(5);
    
    void m1() {
        try {
            latch.await(); //等待 门闩上的 锁 全部释放
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    void m2() {
        for (int i = 0; i < 10; i++) { //循环释放锁
            if(latch.getCount()!=0) {  // 不等于0 也就是说 还有锁
                latch.countDown();//释放一把锁
                System.out.println("m1(执行了)");
            }
        }
    }
    
    public static void main(String[] args) {
        TestSync t = new TestSync();
        new Thread(new Runnable() {

            @Override
            public void run() {
                t.m1(); //第一个线程 先执行m1() 需要等待 5把锁开放
            }
            
        }).start();
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                t.m2();
            }
        }).start();
        
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容