美文网首页
门闩CountDownLatch

门闩CountDownLatch

作者: larQ | 来源:发表于2018-10-26 00:18 被阅读0次

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

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

    一般用于有前后顺序的地方 ,比如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();
            
        }
    }
    

    相关文章

      网友评论

          本文标题:门闩CountDownLatch

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