关于信号量Semaphore的acquire与release的说明
1、Semaphore信号量作为一种流控手段,可以对特定资源的允许同时访问的操作数量进行控制,例如池化技术(连接池)中的并发数,有界阻塞容器的容量等。
2、Semaphore中包含初始化时固定个数的许可,在进行操作的时候,需要先acquire获取到许可,才可以继续执行任务,如果获取失败,则进入阻塞;处理完成之后需要release释放许可。
3、acquire与release之间的关系:在实现中不包含真正的许可对象,并且Semaphore也不会将许可与线程关联起来,因此在一个线程中获得的许可可以在另一个线程中释放。可以将acquire操作视为是消费一个许可,而release操作是创建一个许可,Semaphore并不受限于它在创建时的初始许可数量。也就是说acquire与release并没有强制的一对一关系,release一次就相当于新增一个许可,许可的数量可能会由于没有与acquire操作一对一而导致超出初始化时设置的许可个数。
4、Semaphore示例代码如下:
/** * BoundedHashSet * <p/> * Using Semaphore to bound a collection * * @author Brian Goetz and Tim Peierls */ public class BoundedHashSet <T> {private final Set<T> set; private final Semaphore sem; public BoundedHashSet(int bound) {this.set = Collections.synchronizedSet(new HashSet<T>()); sem = new Semaphore(bound); }public boolean add(T o) throws InterruptedException {sem.acquire(); boolean wasAdded = false; try {wasAdded = set.add(o); return wasAdded; } finally {if (!wasAdded)sem.release(); }}public boolean remove(Object o) {boolean wasRemoved = set.remove(o); if (wasRemoved)sem.release(); return wasRemoved; } }
关于信号量Semaphore的acquire与release的说明相关推荐
- 信号量Semaphore一篇文章叫你明白
已经习惯了阿里面试官的冷笑:用过Semaphore吧,不妨说说? 本质就是 信号量模型,模型图如下: 其中的 计数器 和 等待队列 对外部是透明的,仅能通过提供的三大方法访问它们. 详细说说哪三大方法 ...
- 别再和面试官说不懂信号量Semaphore了!
已经习惯了阿里面试官的冷笑:用过Semaphore吧,不妨说说? 本质就是 信号量模型,模型图如下: 其中的 计数器 和 等待队列 对外部是透明的,仅能通过提供的三大方法访问它们. 详细说说哪三大方法 ...
- python线程信号量semaphore
一.semaphore信号量原理 多线程同时运行,能提高程序的运行效率,但是并非线程越多越好,而semaphore信号量可以通过内置计数器来控制同时运行线程的数量,启动线程(消耗信号量)内置计数器会自 ...
- 死磕java concurrent包系列(六)基于AQS解析信号量Semaphore
Semaphore 之前分析AQS的时候,内部有两种模式,独占模式和共享模式,前面的ReentrantLock都是使用独占模式,而Semaphore同样作为一个基于AQS实现的并发组件,它是基于共享模 ...
- Python 线程信号量 semaphore - Python零基础入门教程
目录 一.Python 线程信号量 semaphore 简介 二.Python 线程信号量 semaphore 原理 三.Python 线程信号量 semaphore 函数介绍 四.Python 线程 ...
- java semaphorewa_Java并发(十五):并发工具类——信号量Semaphore
先做总结: 1.Semaphore是什么? Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 把它比作是控制流量的红绿灯,比如XX马路要 ...
- java 信号量Semaphore
在很多情况下,可能有多个线程需要访问数目很少的资源.假想在服务器上运行着若干个回答客户端请求的线程.这些线程需要连接到同一数据库,但任一时刻 只能获得一定数目的数据库连接.你要怎样才能够有效地将这些固 ...
- python 信号量 semaphore
信号量 信号量(英语:semaphore)又称为信号标, 是一个同步对象,用于保持在0至指定最大值之间的一个计数值. 当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一: 当线 ...
- java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...
信号量(Semaphore)是Java多线程兵法中的一种JDK内置同步器,通过它可以实现多线程对公共资源的并发访问控制.一个线程在进入公共资源时需要先获取一个许可,如果获取不到许可则要等待其它线程释放 ...
最新文章
- scroll事件实现监控滚动条并分页显示示例(zepto.js)
- css制作漂亮彩带导航条菜单
- 第六章---机器学习与数据建模
- 创维e900s用的什么芯片_MT41K512M16HA-125_苹果XR用的是什么闪存芯片
- 【NLP】保姆级教程:手把手带你CNN文本分类(附代码)
- 2019年华南理工大学程序设计竞赛(春季赛)
- Redis源码编译安装
- 行为模式之备忘录模式
- 简单易懂设计模式——简单工厂模式
- 一点php博客,PHP一点认识
- flume消费kafka数据太慢_kafka补充01
- Julia: find 和其它
- 关于传奇MapInfo地图文件参数详细说明
- 分享16款Java小游戏源码Java applet小游戏源码
- 大数据可视化(一)数据可视化概述
- 调用钉钉API发送消息通知给个人或部门 ,钉钉后台
- canvas教程13-使用图片
- 我是一个SDN交换机
- 微信小程序支付以及退款功能(超详细)
- 英语四级和计算机二级补证,SOS:国家英语四级证书,计算机二级证书如 – 手机爱问...
热门文章
- html5 二进制 上传图片,图片上传转二进制流
- 吴恩达机器学习课后作业——SVM支持向量机
- 你的作品集够好了吗?20份精选UI设计作品集给你灵感
- AutoCAD 如何将非1:1比例尺统一改为1:1
- 信息学奥赛一本通c++版在线评测系统_Redmi K30S至尊纪念版评测:2299元还有谁
- C++初学者指南 第十篇(5)
- 基本算法-欧几里德算法(辗转相除法)
- MySQL日志 - General Query Log
- 浅析 Linux 系统调用
- 物联网卡让物流行业“灵活”起来