【锁3】Semaphore(信号量)
Semaphore信号量的核心是用 N 张“许可证”限制同时访问资源的线程数——线程进来先 acquire() 拿一张用完 release() 还回去许可证发完了后面的线程就得排队。下面给你 Java 最常用版本的可运行示例。核心概念初始化时指定许可证数量 N相当于“最多允许 N 个线程同时进临界区”acquire()拿许可证没有就阻塞等待release()还许可证务必放在finally或使用with否则忘了释放就会死锁tryAcquire()非阻塞版本拿不到立刻返回false适合做限流降级importjava.util.concurrent.Semaphore;publicclassSemaphoreDemo{// 许可证数量为 3即同时最多 3 个线程能进临界区privatestaticfinalSemaphoresemaphorenewSemaphore(3);publicstaticvoidmain(String[]args){for(inti1;i5;i){newThread(newTask(线程-i)).start();}}staticclassTaskimplementsRunnable{privatefinalStringname;Task(Stringname){this.namename;}Overridepublicvoidrun(){try{semaphore.acquire();// 拿许可证没有就阻塞System.out.println(name 进入临界区当前可用许可证: semaphore.availablePermits());Thread.sleep(2000);// 模拟业务耗时System.out.println(name 执行完毕);}catch(InterruptedExceptione){e.printStackTrace();}finally{semaphore.release();// 一定要释放System.out.println(name 释放许可证);}}}}运行后会看到前 3 个线程同时进入后 2 个等前面有人释放后才依次进入。线程-1 进入临界区当前可用许可证:2线程-4 进入临界区当前可用许可证:0线程-3 进入临界区当前可用许可证:1线程-1 执行完毕 线程-4 执行完毕 线程-3 执行完毕 线程-4 释放许可证 线程-3 释放许可证 线程-1 释放许可证 线程-5 进入临界区当前可用许可证:1线程-2 进入临界区当前可用许可证:2线程-5 执行完毕 线程-5 释放许可证 线程-2 执行完毕 线程-2 释放许可证 进程已结束退出代码为0 典型应用场景对比场景许可证数量说明数据库连接池连接数上限例如设置 10防止连接耗尽API 接口限流QPS 上限例如设置 50保护后端服务爬虫并发控制目标站承受力避免请求过快被封 IP互斥锁Mutex*1等同于Lock实现线程独占⚠️ 注意事项死锁风险如果acquire()后未调用release()如异常中断会导致永久阻塞。公平性Java 构造器new Semaphore(3, true)可设置为公平模式FIFO但会降低性能。Asyncio 作用域asyncio.Semaphore必须在async def函数内创建不能在模块顶层创建会报 Event Loop 错误。

相关新闻

STM32 FSMC驱动SSD1963 LCD:8080时序硬件解析与实战

STM32 FSMC驱动SSD1963 LCD:8080时序硬件解析与实战

1. 项目概述:从时序图到点亮屏幕的完整旅程 搞嵌入式显示的朋友,对SSD1963这颗经典的LCD驱动芯片应该不陌生。它支持高达864x480的分辨率、24位真彩色,还能直接挂载SDRAM作为显存,在当年算是相当强悍的“显卡”了。但它的8080并行…

2026/8/1 14:01:08 阅读更多
2026最新!纠正孩子发音的3款实用英语听说软件

2026最新!纠正孩子发音的3款实用英语听说软件

【摘要:】 本文结合我5年英语听说教学和工具测评经验,拆解当前少儿英语发音纠正的核心痛点,对比3款主流工具的技术逻辑和实测效果,给出中立选型参考,所有数据均来自实测和公开技术白皮书,无软广。 我当初20…

2026/8/1 14:01:08 阅读更多
航天术语翻译:从精确性到工程实践的挑战与流程

航天术语翻译:从精确性到工程实践的挑战与流程

1. 从“黑话”到“行话”:为什么专业术语翻译是航天的命门在航空航天这个领域待久了,你会发现,工程师和技术人员之间交流,用的几乎是一套自成体系的“黑话”。从“静不稳定”到“热障”,从“比冲”到“羽流”&#xff…

2026/8/1 14:41:10 阅读更多
如何轻松编辑Minecraft游戏数据:NBTExplorer终极指南

如何轻松编辑Minecraft游戏数据:NBTExplorer终极指南

如何轻松编辑Minecraft游戏数据:NBTExplorer终极指南 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经想要自定义Minecraft世界却不知从何下手…

2026/8/1 14:41:10 阅读更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是应用材料(Applied Materials)公司生产的一款用于半导体设备的I/O信号分配电路板。该型号(0100-02186)的核心特点如下:专用于Endura等半导体工艺腔室。集成信号路由与分配功能。连接控制…

2026/8/1 0:09:33 阅读更多
Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机是日本日清(Nissei)品牌的一款工业用三相异步电机,适用于自动化设备及通用机械驱动。该型号(FFMN-32L-10-T0 40AX)的核心特点如下:三相交流异步电动机。额定…

2026/8/1 0:09:33 阅读更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是应用材料(Applied Materials)公司生产的一款用于半导体设备的I/O信号分配电路板。该型号(0100-02186)的核心特点如下:专用于Endura等半导体工艺腔室。集成信号路由与分配功能。连接控制…

2026/8/1 0:09:33 阅读更多
Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机是日本日清(Nissei)品牌的一款工业用三相异步电机,适用于自动化设备及通用机械驱动。该型号(FFMN-32L-10-T0 40AX)的核心特点如下:三相交流异步电动机。额定…

2026/8/1 0:09:33 阅读更多