zoukankan      html  css  js  c++  java
  • 并发编程【CountDownLatch】

    一、使用场景

    CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能

    比如有一个任务,它要等待其他 6 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch

    来实现这种功能了。

    二、代码实现

    public class CountDownLatchDemo {
        public static void main(String[] args) throws InterruptedException {
            CountDownLatch countDownLatch = new CountDownLatch(6);
    
            for (int i = 1; i <= 6; i++) {
                new Thread(()->{
                    System.out.println(Thread.currentThread().getName() + "离开教室");
                    countDownLatch.countDown();
                }, String.valueOf(i)).start();
            }
    
            countDownLatch.await();
            System.out.println(Thread.currentThread().getName() + "班长关门走人");
        }
    } 
    

    运行结果:

    1离开教室
    2离开教室
    3离开教室
    4离开教室
    6离开教室
    5离开教室
    main班长关门走人
    

    三、大致原理分析

    总共有7个线程(6个创建的线程+main线程)在抢 CPU 的执行权,但是如果 main 线程抢占到了的话,会先判断计数器的值是否为0,如果不为0就不能继续往下执行;而其它线程在执行完了之后都会修改计数器的值,将其减1,当这6个线程都执行完毕后,计数器的值就会变为0,所以调用 await(0 方法的线程(此处即main线程)就能继续往下执行。

    Java新手,若有错误,欢迎指正!

  • 相关阅读:
    Java基本数据类型
    Java入门
    JavaSE概述
    ORACLE中的自治事务
    JDWP Transport dt socket failed to initialize
    jinfo命令 Java Configuration Info
    mysql的bind-address设置为127 0 0 1,通过localhost连接访问不了
    与MQ通讯的完整JAVA程序
    Hadoop入门进阶步步高(三)-配置Hadoop
    GC Root
  • 原文地址:https://www.cnblogs.com/Java-biao/p/14497116.html
Copyright © 2011-2022 走看看