samaphore、countdownlatch、cyclinarrier

news2024/11/19 1:54:01

目录

一、samaphore

1、介绍

2、应用

3、原理

二、countdownlatch

三、cyclicbarrier


一、samaphore

1、介绍

信号量,用来限制同时访问共享资源的线程上限。可以理解为停车场入口的提示排,标识有多少车位,有车位才能进去停车,samaphore就是这个管理车位上限的功能。

使用前先要new一个samaphore对象,然后线程要调用acquire方法获取许可才能运行,不然就在阻塞队列里面等待。

2、应用

使用semaphore限流,在访问高峰期时,让请求线程堵塞,高峰期过去再释放许可,当然他只适合限制单机线程数量,并且仅是限制线程数,不是线程资源数(例如连接数等)

用semaphore实现简单连接池,对比享元模式下实现,性能和可读性显然更好

3、原理

构造器:我们在构造的时候要传入信号量的大小,他其实就是调用的aqs同步器,然后把那个state赋值为了3

获取:每次要用就去调用方法用cas把state的数量减去一,当小于0就去阻塞队列里面创建头结点然后指向这个节点,把头设为-1,跟之前的一样就是aqs堵塞队列。

释放:释放会拿到state然后用cas把状态+1,拿到头节点为-1就改为0然后把后继节点唤醒,然后就看看能不能拿到锁,然后一个个往后唤醒,但是如果没有型号量了还是循环一次就又进队列了

二、countdownlatch

倒计时锁,用来做线程之间的同步协作,构造参数用来初始化等待计数,await用来等待计数归零,countdown用来计数减一

底层也是维护了个同步器继承AQS,他也是构造器直接复制到aqs的state,但跟其他同步器不同,他是state为0就能获得锁,当大于0就会被堵塞。当其他线程线程执行完调用释放的时候就用cas让计数器-1

三、cyclicbarrier

循环栅栏,用来进行线程协作,等待线程满足某个计数,构造时设置计数,每个线程执行到某个需要同步的时刻调用await方法进行等待,当等待的线程满足计数个数的时候,继续执行

他比countdownlatch的好处就是可以循环运行,countdown是只能使用一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/681514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch-使用IK分词器进行分词

使用KIbana测试IK分词器 打开开发工具台 ik_smart 最少分词器 分词结果比较少 GET _analyze{"analyzer": "ik_smart","text": "中国共产党"}ik_max_word 颗粒度最细分词器 分词结果比较多,组成各种结果,穷尽词库的可能&#xff01…

easypan前端学习

文章目录 前端项目node 版本node镜像构建项目创建项目安装项目所有依赖 图片资源网站encodeURI & decodeURIapp.config.globalProperties与getCurrentInstanceObject.assignvue-cookies安装vue-cookies 使用vue-cookiesrouter.currentRoutepreserve logimport.meta.envRequ…

QPaint绘制图形

流程 继承QWidget类&#xff0c;重写paintEvent方法&#xff0c;在其中使用QPainter进行绘图。 举例 创建项目&#xff0c;项目结构如下&#xff1a; // widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget…

TypeScript ~ TS 掌握编译文件配置项 ⑥

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

git 上传下载

文章目录 gitee/GitHub 是用来做什么的&#xff1f;什么时候需要学习上传项目到 gitee&#xff1f;为什么要将本地项目上传到 gitee&#xff1f;创建 gitee 仓库&#xff1a;在本地新建一个项目将仓库拉取到本地使用 idea 实现项目的上传下载gitee 仓库查看 下面我就来为大家介…

第六章 习题(6789B)【计算机系统结构】

第六章 习题【计算机系统结构】 前言推荐第六章 习题678911 最后 前言 2023-6-24 10:43:46 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐 第五章 作业&#xff08;149A&#xff09;【计算机系统结构】 答案参考&#xff1a; https://www.docin.com/p-28456…

LVDS (Low Voltage Differential Signaling)基础知识

LVDS(Low Voltage Differential Signaling&#xff09;: 是一种小振幅差分信号技术&#xff0c;它使用非常低的幅度信号 (250mV~450mv&#xff09;通过一对平行的 PCB 走线或平衡电缆传输数据。 在两条平行的差分信号线上流经的电流及电压振幅相反&#xff0c;噪声信号同时耦…

小鱼C python - 集合的练习

题一&#xff1a;用字典实现集合的去重特性 1. 生成100个1&#xff5e;100的随机值 思路&#xff1a; 1. range 范围 2. random.randint(a,b) import random x [] for I in range(100):x.append(random.randint(1,100)) print(x) 2. x和y的交集 思路&#xff1a;1.遍历x,…

通过 pGina 对 Windows 设备进行管理

文章目录 前言1、环境信息1.1、服务器端1.2、客户端 2、pGina 安装及配置2.1、下载并安装2.2、配置2.3、模拟测试2.4、Windows 远程登录测试 总结 前言 对 Windows 设备进行管理&#xff0c;一般是通过 AD 进行的&#xff0c;但是这玩意儿是收费的&#xff0c;而且还挺贵。有没…

SpringSecurity(二):自定义认证(源码+落地实现)。

自定义认证 自定义资源权限规则资源分类自定义资源权限规则为什么我们要自定义呢&#xff1f;如何去覆盖呢&#xff1f;WebSecurityConfigurerAdapter它是干什么用的实例 自定义登录界面步骤源码解析 自定义登录成功处理&#xff08;前后端分离的情况&#xff09;项目环境succe…

Axure中使用echarts图标

第一步&#xff1a;axure中防一个矩形框 第二步&#xff1a;将矩形框命名为Demo 这步很重要&#xff0c;后续会引用这个名字 第三步&#xff1a;打开Echarts示例&#xff0c;选择需要的样式&#xff0c;并调整数值 Examples - Apache ECharts 第四步&#xff1a;代码准备 需…

Windows10host文件修改方法

1、首先打开“此电脑”&#xff0c;定位到&#xff1a; C:\Windows\System32\drivers\etc 2、使用鼠标右键单击“hosts”&#xff0c;弹出来的菜单中选择“属性” 3、弹出“文件属性”窗口后单击“上方的”安全“栏”。 选中“ALL APPLICATON PACKAGES”后单击“编辑” 4、同…

Jmeter核心结构和运行原理(1)

Jmeter核心结构和运行原理 一、Jmeter核心结构和运行原理1、JMeter核心结构2、JMeter的体系结构3、JMeter运行原理a、GUI模式&#xff1a;b、非GUI模式&#xff1a;c、单机模式&#xff1a;d、分布式模式 一、Jmeter核心结构和运行原理 1、JMeter核心结构 测试计划 线程组 配…

MongoDB基本使用(一)

MongoDB基本使用 Nosql简介 NoSQL(NoSQL Not Only SQL )&#xff0c;意即”不仅仅是SQL”。 在现代的计算系统上每天网络上都会产生庞大的数据量&#xff0c; 这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 1970年 E.F.Codd’s提出的关系…

总结910

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.早上回顾之前背诵的文章 2.写自我总结&#…

Java 中常见的数据结构

数据结构简介 数据结构是计算机科学中用于组织和存储数据的一种方式或方法。它定义了不同数据元素之间的关系&#xff0c;以及对这些数据元素进行操作和访问的规则和技术。 数据结构可以用来描述问题的抽象模型&#xff0c;并提供处理该问题的操作和算法。它可以通过逻辑和物…

wpf增加系统托盘图标

使用系统托盘&#xff0c;可以为用户提供一个简便快捷的操作习惯。 wpf中增加系统托盘图标有2种 第一种&#xff0c;使用Hardcodet.NotifyIcon.Wpf开源组件 1.建立一个wpf程序 2.安装Hardcodet.NotifyIcon.Wpf 3.增加图片 图片选择资源&#xff0c;否则获取不到路径 4.界面…

TypeScript - 函数(上)

目录 1、介绍 2、函数类型表达式 3、呼叫签名 4、构造签名 5、泛型函数 6、推论 7、约束 8、使用约束值 9、指定类型参数 1、介绍 函数是JavaScript应用程序的基础。 它帮助你实现抽象层&#xff0c;模拟类&#xff0c;信息隐藏和模块。 在TypeScript里&#xff0c…

Linux——进程的概念

task_struct task_struct 是linux下管理进程的结构&#xff0c;称为PCB&#xff0c;进程控制块。linux所有的指令本质上都是一个进程。进程 task_struct 进程的数据、代码、可执行程序&#xff0c;有属性、有内容。 进程是系统的工作单元。系统由多个进程组成&#xff0c;包…

Linux定时任务--crontab

linux内置了cron进程&#xff0c;cron搭配shell脚本&#xff0c;就可以完成特定的需求&#xff0c;有定时任务的效果。 crontab指令即cron table的简写&#xff0c;相关的配置文件目录如下&#xff1a; /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务&#xf…