返回顶部
首页 > 资讯 > 后端开发 > Python >JavaCountDownLatch与CyclicBarrier及Semaphore使用教程
  • 528
分享到

JavaCountDownLatch与CyclicBarrier及Semaphore使用教程

JavaCountDownLatchJavaCyclicBarrierJavaSemaphore 2023-01-04 12:01:30 528人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录CountDownLatchCyclicBarrierSemaphoreCountDownLatch CountDownLatch是一个倒数的计数器阀门,初始化时阀门关闭,指定计

CountDownLatch

CountDownLatch是一个倒数的计数器阀门,初始化时阀门关闭,指定计数的数量,当数量倒数减到0时阀门打开,被阻塞线程被唤醒。

public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
    // 总数是6,必须要执行任务的时候,再使用    !
    CountDownLatch countDownLatch = new CountDownLatch(6);
    for (int i = 1; i <=6 ; i++) {    
        new Thread(()->{
        System.out.println(Thread.currentThread().getName()+" Go out");
        countDownLatch.countDown(); // 数量-1
        },String.valueOf(i)).start();
    }  
    countDownLatch.await(); // 等待计数器归零,然后再向下执行
    System.out.println("Close Door");
    }
}

原理

countDownLatch.countDown();//数量-1

countDownLatch.await();//等待

每次有线程调用 countDown() 数量-1,假设计数器变为0,countDownLatch.await() 就会被唤醒,继续执行!

CyclicBarrier

CyclicBarrier是一个可循环的屏障,它允许多个线程在执行完相应的操作后彼此等待共同到达一个point,等所有线程都到达后再继续执行。

CyclicBarrier也可以像CountDownLatch一样适用于多个子任务并发执行,当所有子任务都执行完后再继续接下来的工作。

public class CyclicBarrierDemo {
    public static void main(String[] args) {
         // 召唤龙珠的线程
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{
            System.out.println("召唤神龙成功!");
        });
        for (int i = 1; i <=7 ; i++) {
            final int temp = i;
            // lambda能操作到 i 吗
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+"收集"+temp+"个龙珠");
                try {
                cyclicBarrier.await(); // 等待
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

Semaphore

Semaphore翻译过来是信号量的意思,它的作用是控制多个线程对同一个资源的访问线程数量。比如在停车场停车,里面有10个车位,当这10个车位被停满的时候其他的车只能等待(堵塞)里面有车驶出(release)然后再进入。

public class SemaphoreDemo {
    public static void main(String[] args) {
        // 线程数量:停车位! 限流!
        Semaphore semaphore = new Semaphore(3);
        for (int i = 1; i <=6 ; i++) {
            new Thread(()->{
            // acquire() 得到
            try {
                semaphore.acquire();
                System.out.println(Thread.currentThread().getName()+"抢到车位");
                TimeUnit.SECONDS.sleep(2);
                System.out.println(Thread.currentThread().getName()+"离开车位");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                semaphore.release(); // release() 释放
            }
        },String.valueOf(i)).start();
        }
    }
}

semaphore.acquire();获得,假设如果已经满了,等待,等待被释放为止!

semaphore.release();释放,会将当前的信号量释放 + 1,然后唤醒等待的线程!

作用: 多个共享资源互斥的使用!并发限流,控制最大的线程数!

到此这篇关于Java CountDownLatch与CyclicBarrier及Semaphore使用教程的文章就介绍到这了,更多相关Java CountDownLatch内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaCountDownLatch与CyclicBarrier及Semaphore使用教程

本文链接: https://lsjlt.com/news/176615.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaCountDownLatch与CyclicBarrier及Semaphore使用教程
    目录CountDownLatchCyclicBarrierSemaphoreCountDownLatch CountDownLatch是一个倒数的计数器阀门,初始化时阀门关闭,指定计...
    99+
    2023-01-04
    Java CountDownLatch Java CyclicBarrier Java Semaphore
  • Navicat使用教程及安装教程
    Navicat是一个广泛使用的数据库管理工具,可用于管理多种数据库系统,如MySQL、MariaDB、Oracle等。它提供了丰富的功能,使得管理数据库变得更加容易和高效。安装Navicat十分简单,只需下载安装包并按照向导进行操作即可。在...
    99+
    2023-08-16
    数据库 mysql
  • 如何使用Java高并发编程CyclicBarrier
    本篇内容介绍了“如何使用Java高并发编程CyclicBarrier”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是CyclicBarr...
    99+
    2023-06-15
  • java多线程之CyclicBarrier的使用方法
    java多线程之CyclicBarrier的使用方法public class CyclicBarrierTest { public static void main(String[] args) { ExecutorServi...
    99+
    2023-05-30
    java 多线程 cyclicbarrier
  • 详解Java信号量Semaphore的原理及使用
    目录1.Semaphore的概述2.Semaphore的原理2.1 基本结构2.2 可中断获取信号量2.3 不可中断获取信号量2.4 超时可中断获取信号量2.5 尝试获取信号量2.6...
    99+
    2024-04-02
  • SpringMVCHibernate与JPA使用教程
    目录一、POM二、引入springMVC中的applicationContext.xml三、启动类起因: 老项目是SpringMVC,为了之后能使用更方便的SpringBoot。 所...
    99+
    2022-12-08
    SpringMVC Hibernate与JPA SpringMVC Hibernate SpringMVC JPA
  • Charles安装及使用教程
    一. 简介及安装 一、charles的使用 1  charles的说明 Charles其实是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的,能够...
    99+
    2023-09-02
    linux 网络 java charles
  • sonar安装及使用教程
    Sonar是一个代码质量管理平台,用于分析和管理代码的质量。它可以帮助开发团队发现和解决代码中的潜在问题,提高代码的可读性和可维护性...
    99+
    2023-09-17
    sonar
  • Java并发编程之Semaphore的使用简介
    目录简介Semaphored的使用构造方法核心方法示例使用Semaphore实现互斥简介 Semaphore是用来限制访问特定资源的并发线程的数量,相对于内置锁synchroniz...
    99+
    2024-04-02
  • 如何使用Java高并发编程之Semaphore
    本篇内容主要讲解“如何使用Java高并发编程之Semaphore”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Java高并发编程之Semaphore”吧!共享锁、独占锁学习semapho...
    99+
    2023-06-15
  • Java多线程Semaphore工具的使用详解
    目录Semaphore 是一种用于控制线程并发访问数的同步工具。它通过维护一定数量的许可证来限制对共享资源的访问。 许可证的数量就是可以同时访问共享资源的线程数目。 当一个线程需要访...
    99+
    2023-05-19
    Java 多线程 Java Semaphore
  • Java多线程同步工具类CyclicBarrier的使用
    目录CyclicBarrier是什么CyclicBarrier的基本使用方法CyclicBarrier的源码实现(1)CyclicBarrier的初始化(2)CyclicBarrie...
    99+
    2023-05-18
    Java CyclicBarrier
  • mysql-atlas安装及使用教程
    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加...
    99+
    2024-04-02
  • 【Tomcat】Tomcat 介绍及使用教程
    文章目录 1. Tomcat 介绍2. 下载安装2.1 Windows 中安装2.2 Linux 中安装2.3 访问 Tomcat 3. Tomcat 的目录结构4. Tomcat 的配置...
    99+
    2023-10-03
    tomcat java-ee java
  • Mac安装nvm教程及使用
    nvm 是 node 版本管理器,也就是说一个 nvm 可以管理多个 node 版本(包含 npm 与 npx),可以方便快捷的安装、切换 不同版本的 node。 1、直接通过brew安装 执行命令:...
    99+
    2023-08-31
    nvm安装教程 nvm使用 nvm命令 mac安装nvm 配置nvm环境变量
  • Spark SQL配置及使用教程
    目录SparkSQL版本: SparkSQL DSL语法 SparkSQL和Hive的集成Spark应用依赖第三方jar包文件解决方案        SparkSQL的ThriftS...
    99+
    2024-04-02
  • Java并发编程之工具类Semaphore的使用
    一、Semaphore的理解 Semaphore属于java.util.concurrent包; Semaphore翻译成字面意思为信号量,Semaphore可以控...
    99+
    2024-04-02
  • Tomcat 与 maven 的安装与使用教程
    目录Tomcat1、下载2、重要目录3、使用 Tomcat3.1、启动 Tomcat3.2、使用浏览器访问 Tomcat3.3、通过 webapps 目录部署页面Maven1、什么是...
    99+
    2024-04-02
  • Java多线程怎么使用同步工具类CyclicBarrier
    本篇内容介绍了“Java多线程怎么使用同步工具类CyclicBarrier”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 CyclicBa...
    99+
    2023-06-25
  • R.swift的使用与安装教程
    为什么使用R.swift R.swift可以获取强类型、自动完成的资源,如图像、字体和段落完全类型化。更少的强制转换和猜测方法将返回什么编译时检查,运行时不再有导致应用程序崩溃的错误...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作