【鎖3】Semaphore(信號(hào)量)
Semaphore信號(hào)量的核心是用 N 張“許可證”限制同時(shí)訪問資源的線程數(shù)——線程進(jìn)來先 acquire() 拿一張用完 release() 還回去許可證發(fā)完了后面的線程就得排隊(duì)。下面給你 Java 最常用版本的可運(yùn)行示例。核心概念初始化時(shí)指定許可證數(shù)量 N相當(dāng)于“最多允許 N 個(gè)線程同時(shí)進(jìn)臨界區(qū)”acquire()拿許可證沒有就阻塞等待release()還許可證務(wù)必放在finally或使用with否則忘了釋放就會(huì)死鎖tryAcquire()非阻塞版本拿不到立刻返回false適合做限流降級(jí)importjava.util.concurrent.Semaphore;publicclassSemaphoreDemo{// 許可證數(shù)量為 3即同時(shí)最多 3 個(gè)線程能進(jìn)臨界區(qū)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 進(jìn)入臨界區(qū)當(dāng)前可用許可證: semaphore.availablePermits());Thread.sleep(2000);// 模擬業(yè)務(wù)耗時(shí)System.out.println(name 執(zhí)行完畢);}catch(InterruptedExceptione){e.printStackTrace();}finally{semaphore.release();// 一定要釋放System.out.println(name 釋放許可證);}}}}運(yùn)行后會(huì)看到前 3 個(gè)線程同時(shí)進(jìn)入后 2 個(gè)等前面有人釋放后才依次進(jìn)入。線程-1 進(jìn)入臨界區(qū)當(dāng)前可用許可證:2線程-4 進(jìn)入臨界區(qū)當(dāng)前可用許可證:0線程-3 進(jìn)入臨界區(qū)當(dāng)前可用許可證:1線程-1 執(zhí)行完畢 線程-4 執(zhí)行完畢 線程-3 執(zhí)行完畢 線程-4 釋放許可證 線程-3 釋放許可證 線程-1 釋放許可證 線程-5 進(jìn)入臨界區(qū)當(dāng)前可用許可證:1線程-2 進(jìn)入臨界區(qū)當(dāng)前可用許可證:2線程-5 執(zhí)行完畢 線程-5 釋放許可證 線程-2 執(zhí)行完畢 線程-2 釋放許可證 進(jìn)程已結(jié)束退出代碼為0 典型應(yīng)用場景對比場景許可證數(shù)量說明數(shù)據(jù)庫連接池連接數(shù)上限例如設(shè)置 10防止連接耗盡API 接口限流QPS 上限例如設(shè)置 50保護(hù)后端服務(wù)爬蟲并發(fā)控制目標(biāo)站承受力避免請求過快被封 IP互斥鎖Mutex*1等同于Lock實(shí)現(xiàn)線程獨(dú)占?? 注意事項(xiàng)死鎖風(fēng)險(xiǎn)如果acquire()后未調(diào)用release()如異常中斷會(huì)導(dǎo)致永久阻塞。公平性Java 構(gòu)造器new Semaphore(3, true)可設(shè)置為公平模式FIFO但會(huì)降低性能。Asyncio 作用域asyncio.Semaphore必須在async def函數(shù)內(nèi)創(chuàng)建不能在模塊頂層創(chuàng)建會(huì)報(bào) Event Loop 錯(cuò)誤。

相關(guān)新聞

MiniMax H3 深度解析:打破模態(tài)界限,全能多模態(tài)模型優(yōu)勢在哪

MiniMax H3 深度解析:打破模態(tài)界限,全能多模態(tài)模型優(yōu)勢在哪

今天,正式發(fā)布 MiniMax H3。這是一款通用的全模態(tài)生成模型,支持對文本、圖像、視頻、聲音組成的多模態(tài)上下文的統(tǒng)一理解能力、能夠輸出具備原生雙聲道的音視頻,最高可支持 15s 2K 分辨率。 MiniMax H3 具備商用級(jí)的多場景內(nèi)容生成能力&#x…

2026/8/1 14:01:08 閱讀更多
STM32 FSMC驅(qū)動(dòng)SSD1963 LCD:8080時(shí)序硬件解析與實(shí)戰(zhàn)

STM32 FSMC驅(qū)動(dòng)SSD1963 LCD:8080時(shí)序硬件解析與實(shí)戰(zhàn)

1. 項(xiàng)目概述:從時(shí)序圖到點(diǎn)亮屏幕的完整旅程 搞嵌入式顯示的朋友,對SSD1963這顆經(jīng)典的LCD驅(qū)動(dòng)芯片應(yīng)該不陌生。它支持高達(dá)864x480的分辨率、24位真彩色,還能直接掛載SDRAM作為顯存,在當(dāng)年算是相當(dāng)強(qiáng)悍的“顯卡”了。但它的8080并行…

2026/8/1 14:01:08 閱讀更多
2026最新!糾正孩子發(fā)音的3款實(shí)用英語聽說軟件

2026最新!糾正孩子發(fā)音的3款實(shí)用英語聽說軟件

【摘要:】 本文結(jié)合我5年英語聽說教學(xué)和工具測評(píng)經(jīng)驗(yàn),拆解當(dāng)前少兒英語發(fā)音糾正的核心痛點(diǎn),對比3款主流工具的技術(shù)邏輯和實(shí)測效果,給出中立選型參考,所有數(shù)據(jù)均來自實(shí)測和公開技術(shù)白皮書,無軟廣。 我當(dāng)初20…

2026/8/1 14:01:08 閱讀更多
5分鐘解鎖Burp Suite中文界面:安全測試新手的終極指南

5分鐘解鎖Burp Suite中文界面:安全測試新手的終極指南

5分鐘解鎖Burp Suite中文界面:安全測試新手的終極指南 【免費(fèi)下載鏈接】BurpSuiteCN-Release BurpSuite漢化發(fā)布 項(xiàng)目地址: https://gitcode.com/gh_mirrors/bu/BurpSuiteCN-Release 作為一名網(wǎng)絡(luò)安全新手,你是否曾經(jīng)面對Burp Suite那密密麻麻的…

2026/8/1 15:01:40 閱讀更多
操作系統(tǒng)核心概念與高頻考點(diǎn)解析:從進(jìn)程管理到虛擬內(nèi)存

操作系統(tǒng)核心概念與高頻考點(diǎn)解析:從進(jìn)程管理到虛擬內(nèi)存

1. 項(xiàng)目概述:一份能救命的期末復(fù)習(xí)“彈藥庫”又到期末了,是不是感覺操作系統(tǒng)的概念像一團(tuán)亂麻,進(jìn)程、線程、死鎖、內(nèi)存管理……每個(gè)詞都認(rèn)識(shí),但合在一起就不知道從何背起?特別是簡答題,書上內(nèi)容浩如煙海&am…

2026/8/1 15:01:40 閱讀更多
二維離散點(diǎn)曲率計(jì)算:從原理到工程實(shí)踐

二維離散點(diǎn)曲率計(jì)算:從原理到工程實(shí)踐

1. 項(xiàng)目概述:從離散點(diǎn)陣中“看見”彎曲 在數(shù)據(jù)分析和工程應(yīng)用的很多場景里,我們拿到手的不是一條光滑的數(shù)學(xué)曲線,而是一串離散的、由儀器采樣或程序生成的點(diǎn)坐標(biāo)。比如,你用激光掃描儀獲取了一個(gè)零件輪廓的點(diǎn)云,或者從…

2026/8/1 15:01:40 閱讀更多
洛雪音樂音源配置終極指南:快速解鎖全網(wǎng)音樂資源

洛雪音樂音源配置終極指南:快速解鎖全網(wǎng)音樂資源

洛雪音樂音源配置終極指南:快速解鎖全網(wǎng)音樂資源 【免費(fèi)下載鏈接】lxmusic- lxmusic(洛雪音樂)全網(wǎng)最新最全音源 項(xiàng)目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 想要在洛雪音樂中暢聽全網(wǎng)音樂嗎?音源配置是關(guān)鍵!本指南將帶你…

2026/8/1 15:01:40 閱讀更多
Bifrost:三星固件下載的終極免費(fèi)解決方案

Bifrost:三星固件下載的終極免費(fèi)解決方案

Bifrost:三星固件下載的終極免費(fèi)解決方案 【免費(fèi)下載鏈接】Bifrost Cross-platform tool for downloading Samsung mobile device firmware. 項(xiàng)目地址: https://gitcode.com/gh_mirrors/sa/Bifrost 在三星設(shè)備用戶的世界里,獲取官方固件一直是個(gè)技…

2026/8/1 15:01:40 閱讀更多
AutoHotkey取色宏實(shí)戰(zhàn):從原理到應(yīng)用的自動(dòng)化腳本開發(fā)指南

AutoHotkey取色宏實(shí)戰(zhàn):從原理到應(yīng)用的自動(dòng)化腳本開發(fā)指南

1. 項(xiàng)目概述:從“取色”到“自動(dòng)化”的橋梁最近在折騰一些自動(dòng)化腳本時(shí),又翻出了我的“老伙計(jì)”AutoHotkey(AHK)。這次的需求比較特別,我需要讓腳本能“看見”屏幕上的顏色,并根據(jù)顏色變化做出反應(yīng)。比如&a…

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

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

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

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/1 0:09:33 閱讀更多