当前位置: 首页 > news >正文

Semaphore类-控制同时访问特定资源的线程数量

Java Semaphore类说明

一、Semaphore 类概述

Semaphore 是java.util.concurrent包下的并发同步工具类,也被称为 "信号量",它的核心作用是控制同时访问特定资源的线程数量,通过维护一组 "许可(permits)" 来实现流量控制。

你可以将它理解为资源的 "访问通行证管理工具":线程在访问受保护的资源前,必须先从 Semaphore 中获取一个许可;线程使用完资源后,需要将许可归还给 Semaphore,这样其他线程才能获取该许可来访问资源。

二、该构造函数的详细说明

你提供的代码是 Semaphore 的其中一个构造函数:

public Semaphore(int permits) {sync = new NonfairSync(permits);
}

1. 构造函数作用

该构造函数用于创建一个非公平模式的 Semaphore 实例,它的内部会初始化一个NonfairSync对象(Semaphore 的内部同步类,基于 AQS(AbstractQueuedSynchronizer)实现)。

2. 参数含义

  • permits:初始的可用许可数量

    • permits为正数时,代表初始时可以有对应数量的线程同时获取许可访问资源。

    • permits为负数时,初始状态下没有可用许可,必须先执行release()操作来增加许可数量,之后其他线程才能成功获取许可。

三、Semaphore 的核心方法

Semaphore 的核心方法用于操作许可,主要包括:

  1. acquire():尝试获取一个许可,若当前没有可用许可,线程会被阻塞,直到获取到许可或者线程被中断。

  2. acquire(int permits):尝试获取指定数量的许可,同样会在许可不足时阻塞。

  3. release():释放一个许可,将许可归还给 Semaphore,会唤醒等待获取许可的线程。

  4. release(int permits):释放指定数量的许可。

  5. tryAcquire():尝试获取一个许可,会立即返回结果,获取成功返回true,失败返回false,不会阻塞线程。

  6. tryAcquire(long timeout, TimeUnit unit):在指定的超时时间内尝试获取许可,超时后仍未获取到则返回false

四、应用场景

Semaphore 常用于限流和资源控制的场景,比如:

  1. 数据库连接池限流:限制同时访问数据库的连接数量,避免数据库因连接过多而崩溃。

  2. 接口访问限流:控制同一时间访问某个接口的请求数量,防止服务被高并发请求压垮。

  3. 共享资源的并发访问控制:比如停车场车位管理,车位数量就是许可数,车辆进入时获取许可,离开时释放许可。

  4. 线程池辅助控制:配合线程池使用,控制同时执行的任务数量。

五、公平与非公平模式的区别

Semaphore 分为公平模式和非公平模式,你提供的构造函数创建的是非公平模式:

  1. 非公平模式(默认)

    1. 线程获取许可时不保证顺序,新的线程可能会插队获取到许可,而等待时间较长的线程可能会继续等待。

    2. 优点是吞吐量更高,因为减少了线程切换的开销。

  2. 公平模式

    1. 需要使用另一个构造函数public Semaphore(int permits, boolean fair),将fair参数设为true来创建。

    2. 会按照线程等待的先后顺序分配许可,保证等待最久的线程优先获取许可,避免线程饥饿。

    3. 缺点是吞吐量相对较低,因为需要维护等待队列的顺序。

http://www.jsqmd.com/news/465703/

相关文章:

  • Sql Server数据库远程连接访问配置
  • 网站换域名后数据库连接错误补充修复
  • 网站换域名后打不开SSL证书问题(HTTPS网站专属)
  • 数据库小白如何用 XinServer 建复杂结构?
  • 『NAS』在NAS养一只国行龙虾-CoPaw
  • 从本地到云端:基于LangChain与阿里云百炼构建企业级AI应用实战
  • 计算机网络的IP路由器功能:深入解析与实战演练
  • SQL Server2022版+SSMS安装教程(保姆级)
  • 2000-2025年地级市新能源产业重视度数据
  • Python基于flask的微信小程序的高校招生服务平台设计与实现
  • Python基于flask的社区残障残疾人士残联服务平台系统
  • phy_simulators之nr_pbchsim之发送端
  • phy_simulators之nr_pbchsim之PSS
  • 油茶果烘干机怎么选?看准这4大维度,这5家厂商值得考虑 - 深度智识库
  • 如何选公关策划、舞美搭建、活动策划?2026 年四川公关公司全面评测与推荐,直击预算与效果痛点 - 深度智识库
  • 2026四川拉森铺路钢板、钢板桩、路基箱出租厂商推荐 蜀鑫诚深耕本地工程租赁 - 深度智识库
  • 油茶果烘干机怎么选?不同规模经营主体的“避坑”与“最优”策略 - 深度智识库
  • 2026年全国温泉防溺水智能系统厂家榜单 精准预警 服务完善 适配各类温泉场馆 - 深度智识库
  • 聚丙烯酰胺、聚合氯化铝供应商怎么选?2026 年最新评估体系:五大品牌商技术数据与商业适配性对比 - 深度智识库
  • 2026 陕西屋面瓦品类解析 中兆建材ASA合成树脂瓦仿古树脂瓦核心实力全解 - 深度智识库
  • 安装OpenClaw时,国内用户推荐用哪家AI模型的API Key?
  • 油茶果烘干设备怎么选?五强企业横向测评与适配场景指南 - 深度智识库
  • 菊花岛潮汐表查询2026-03-13
  • 中药材烘干设备哪家强?2026国内口碑企业汇总 - 深度智识库
  • 安装OpenClaw时,网上说的‘远程安装‘和‘上门安装‘服务靠谱吗?为什么这么贵?
  • 淘宝或闲鱼上几十块的OpenClaw部署服务是什么?
  • 辣椒烘干机哪家强?国内5家技术流企业的实力与案例大起底 - 深度智识库
  • 安装OpenClaw成功后,怎么打开OpenClaw的操作页面?
  • 并发与并行
  • 系统与内存架构