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的说明相关推荐

  1. 信号量Semaphore一篇文章叫你明白

    已经习惯了阿里面试官的冷笑:用过Semaphore吧,不妨说说? 本质就是 信号量模型,模型图如下: 其中的 计数器 和 等待队列 对外部是透明的,仅能通过提供的三大方法访问它们. 详细说说哪三大方法 ...

  2. 别再和面试官说不懂信号量Semaphore了!

    已经习惯了阿里面试官的冷笑:用过Semaphore吧,不妨说说? 本质就是 信号量模型,模型图如下: 其中的 计数器 和 等待队列 对外部是透明的,仅能通过提供的三大方法访问它们. 详细说说哪三大方法 ...

  3. python线程信号量semaphore

    一.semaphore信号量原理 多线程同时运行,能提高程序的运行效率,但是并非线程越多越好,而semaphore信号量可以通过内置计数器来控制同时运行线程的数量,启动线程(消耗信号量)内置计数器会自 ...

  4. 死磕java concurrent包系列(六)基于AQS解析信号量Semaphore

    Semaphore 之前分析AQS的时候,内部有两种模式,独占模式和共享模式,前面的ReentrantLock都是使用独占模式,而Semaphore同样作为一个基于AQS实现的并发组件,它是基于共享模 ...

  5. Python 线程信号量 semaphore - Python零基础入门教程

    目录 一.Python 线程信号量 semaphore 简介 二.Python 线程信号量 semaphore 原理 三.Python 线程信号量 semaphore 函数介绍 四.Python 线程 ...

  6. java semaphorewa_Java并发(十五):并发工具类——信号量Semaphore

    先做总结: 1.Semaphore是什么? Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 把它比作是控制流量的红绿灯,比如XX马路要 ...

  7. java 信号量Semaphore

    在很多情况下,可能有多个线程需要访问数目很少的资源.假想在服务器上运行着若干个回答客户端请求的线程.这些线程需要连接到同一数据库,但任一时刻 只能获得一定数目的数据库连接.你要怎样才能够有效地将这些固 ...

  8. python 信号量 semaphore

    信号量 信号量(英语:semaphore)又称为信号标, 是一个同步对象,用于保持在0至指定最大值之间的一个计数值. 当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一: 当线 ...

  9. java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...

    信号量(Semaphore)是Java多线程兵法中的一种JDK内置同步器,通过它可以实现多线程对公共资源的并发访问控制.一个线程在进入公共资源时需要先获取一个许可,如果获取不到许可则要等待其它线程释放 ...

最新文章

  1. scroll事件实现监控滚动条并分页显示示例(zepto.js)
  2. css制作漂亮彩带导航条菜单
  3. 第六章---机器学习与数据建模
  4. 创维e900s用的什么芯片_MT41K512M16HA-125_苹果XR用的是什么闪存芯片
  5. 【NLP】保姆级教程:手把手带你CNN文本分类(附代码)
  6. 2019年华南理工大学程序设计竞赛(春季赛)
  7. Redis源码编译安装
  8. 行为模式之备忘录模式
  9. 简单易懂设计模式——简单工厂模式
  10. 一点php博客,PHP一点认识
  11. flume消费kafka数据太慢_kafka补充01
  12. Julia: find 和其它
  13. 关于传奇MapInfo地图文件参数详细说明
  14. 分享16款Java小游戏源码Java applet小游戏源码
  15. 大数据可视化(一)数据可视化概述
  16. 调用钉钉API发送消息通知给个人或部门 ,钉钉后台
  17. canvas教程13-使用图片
  18. 我是一个SDN交换机
  19. 微信小程序支付以及退款功能(超详细)
  20. 英语四级和计算机二级补证,SOS:国家英语四级证书,计算机二级证书如 – 手机爱问...

热门文章

  1. html5 二进制 上传图片,图片上传转二进制流
  2. 吴恩达机器学习课后作业——SVM支持向量机
  3. 你的作品集够好了吗?20份精选UI设计作品集给你灵感
  4. AutoCAD 如何将非1:1比例尺统一改为1:1
  5. 信息学奥赛一本通c++版在线评测系统_Redmi K30S至尊纪念版评测:2299元还有谁
  6. C++初学者指南 第十篇(5)
  7. 基本算法-欧几里德算法(辗转相除法)
  8. MySQL日志 - General Query Log
  9. 浅析 Linux 系统调用
  10. 物联网卡让物流行业“灵活”起来