千家信息网

如何解析Semaphore信号量

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家介绍如何解析Semaphore信号量 ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前几天群里有网友问我信号量和线程池,我对信号量回答有些错误,后面群里其他网友做了
千家信息网最后更新 2026年10月31日如何解析Semaphore信号量

这篇文章给大家介绍如何解析Semaphore信号量 ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前几天群里有网友问我信号量和线程池,我对信号量回答有些错误,后面群里其他网友做了更正,今天由于时间紧张,我就简单的在说一下信号量和线程池。

自从 jdk5.0 开始在 java.util.concurrent 包里提供了 Semaphore 的官方实现,因此大家不需要自己去实现 Semaphore。但是还是很有必要去熟悉如何使用 Semaphore 及其背后的原理。Semaphore(信号量)是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失,或者像锁一样用于保护一个关键区域。

信号量和线程池的使用场景非常的广泛,最简单的就是 Hystirx 中提供了两种模式执行逻辑:信号量、线程池。所以对于 JUC 这套视频,大家还是很有必要看一看的。

Semaphore 可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在 Windows 下可以设置共享文件的最大客户端访问个数。

Semaphore 实现的功能就类似厕所有 5 个坑,假如有10个人要上厕所,那么同时只能有多少个人去上厕所呢?同时只能有5个人能够占用,当 5 个人中的任何一个人让开后,其中等待的另外5个人中又有一个人可以占用了。另外等待的5个人中可以是随机获得优先机会,也可以是按照先来后到的顺序获得机会,这取决于构造 Semaphore 对象时传入的参数选项。单个信号量的 Semaphore 对象可以实现互斥锁的功能,并且可以是由一个线程获得了"锁",再由另一个线程释放"锁",这可应用于死锁恢复的一些场合。

Semaphore 维护了当前访问的个数,提供同步机制,控制同时访问的个数。在数据结构中链表可以保存"无限"的节点,用 Semaphore 可以实现有限大小的链表。另外重入锁 ReentrantLock 也可以实现该功能,但实现上要复杂些。

acquire()这里我定义了 10 个人要上厕所,但是只有 5 个坑位,每个人消耗随机的时间,直接运行上面这段代码,可以看到一开始进去了 5 个人,后来就是陆陆续续的有人进,有人出了。但是正在使用的一定不会超过 5 个的。

acquire()


如果没有可用的许可,则在发生以下两种情况之一前,禁止将当前线程用于线程安排目的并使其处于休眠状态:某些其他线程调用此信号量的 release()方法,并且当前线程是下一个要被分配许可的线程;或者其他某些线程中断当前线程。从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。获取一个许可(如果提供了一个)并立即返回,将可用的许可数减 1。

如果当前线程:被此方法将其已中断状态设置为 on ;或者在等待许可时被中断。则抛出 InterruptedException,并且清除当前线程的已中断状态。

release()


释放一个许可,将其返回给信号量。释放一个许可,将可用的许可数增加 1。如果任意线程试图获取许可,则选中一个线程并将刚刚释放的许可给予它。然后针对线程安排目的启用(或再启用)该线程。
不要求释放许可的线程必须通过调用 acquire() 来获取许可。通过应用程序中的编程约定来建立信号量的正确用法。

另外两个不常用的方法,public int availablePermits()查看现在可用的信号量。public int drainPermits(),这个方法返回即可所有的许可数目,并将许可置 0。public Semaphore(int permits) 其中参数permits就是允许同时运行的线程数目。

关于如何解析Semaphore信号量 就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

线程 信号 信号量 个人 同时 个数 功能 厕所 就是 方法 状态 必要 内容 参数 对象 数目 时间 更多 机会 目的 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 华服互联网科技靠谱吗 广州百单互联网科技有限公司 科技金融是不是互联网金融 互联网科技的发展 北京互联网科技公司 朗涯互联网科技 润盈互联网科技 互联网金融 科技创新 互联网巨头投资的硬核科技 江苏南京365互联网科技 天速互联网络科技有限公司 以后互联网后是啥科技 花神(南京)互联网科技有限公司 米聚互联网科技南京有限公司排面 科技大学互联网 北京市互联网新科技 世界互联网科技成果奖 陕西九四连强互联网科技有限公司 科技互联网公司两年变化 嘟嘟瓜互联网科技 宜安科技 互联网金融 丰台科技园 互联网公司 互联网科技生活的内容 卫星互联网科技股票 深圳国际航运科技和互联网 千方科技属于互联网企业吗 南博望互联网科技有限公司 国大互联网教育科技有限公司薪资 互联网金融运营模式中的金融科技
0