zoukankan      html  css  js  c++  java
  • 【Java线程】CountDownLatch

    CountDownLatch基于线程计数器来实现并发访问控制,主要用于主线程等待其它子线程都执行完毕后再执行某某操作。

    其使用步骤:

    1.主线程定义CountDownLatch,参数等于要执行的子线程个数;

    2.子线程运行完后掉latch.countDown,让计数器减去一,如果子线程定义在别处需要内置引用指向latch,通常可以通过构造函数传入;

    3.每个子线程都执行完后,latch的计数器减成了0,此时停顿在latch.await()上的主线程便开始执行。

    程序:

    package ufo;
    
    import java.util.concurrent.CountDownLatch;
    
    public class LatchTest {
        public static void main(String... args) {
            System.out.println("主线程开始");
            final CountDownLatch latch=new CountDownLatch(2);
            
            new Thread() {
                public void run() {
                    try {
                        System.out.println("匿名线程一开始");
                        Thread.sleep(1000);
                        latch.countDown();
                        System.out.println("匿名线程一执行完毕");
                    }catch(Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }.start();
            
            new Thread() {
                public void run() {
                    try {
                        System.out.println("匿名线程二开始");
                        Thread.sleep(2000);
                        latch.countDown();
                        System.out.println("匿名线程二执行完毕");
                    }catch(Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }.start();
            
            try {
                System.out.println("等待两个匿名线程执行完毕");
                latch.await();
                System.out.println("两个匿名线程已执行完毕,主线程继续执行");
            }catch(Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    输出:

    主线程开始
    匿名线程一开始
    等待两个匿名线程执行完毕
    匿名线程二开始
    匿名线程一执行完毕
    匿名线程二执行完毕
    两个匿名线程已执行完毕,主线程继续执行

    -END-

  • 相关阅读:
    二叉搜索树
    splay模板
    树状数组模板
    K尾相等数
    寻找最大数
    布线问题(最小生成树)
    开心的小明
    独木舟上的旅行(二)
    The Triangle(记忆化搜索)
    喷水装置(二)
  • 原文地址:https://www.cnblogs.com/heyang78/p/15358132.html
Copyright © 2011-2022 走看看