Java中的Semaphore信號量簡單使用代碼實例
Semaphore信號量
Semaphore是用來保護(hù)一個或者多個共享資源的訪問,Semaphore內(nèi)部維護(hù)了一個計數(shù)器,其值為可以訪問的共享資源的個數(shù)。
一個線程要訪問共享資源,先獲得信號量,如果信號量的計數(shù)器值大于1,意味著有共享資源可以訪問,則使其計數(shù)器值減去1,再訪問共享資源。
如果計數(shù)器值為0,線程進(jìn)入休眠。當(dāng)某個線程使用完共享資源后,釋放信號量,并將信號量內(nèi)部的計數(shù)器加1,之前進(jìn)入休眠的線程將被喚醒并再次試圖獲得信號量。 例如:停車場的車位 ,有空閑車位才可以停,沒有空閑車位只能等待。 主要使用方法:
acquire() 從信號量獲取一個許可,在提供一個許可之前一直將線程阻塞 否則線程被中斷
release() 釋放一個許可,將其返回給信號量
例子: 停車場有五個停車位 有十輛車要停
public class SemaphoreDemo {
public static void main(String[] args) {
//參數(shù) 許可數(shù)量 例有五個空停車位
Semaphore semaphore = new Semaphore(5);
//模擬10輛汽車 要停車 只能有五輛汽車同時停 其他車只能等待
for (int i = 0; i < 10; i++) {
new Thread(() -> {
try {
//acquire()得到 成功拿到車位停車
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + "搶到車位");
//停兩秒鐘的車
TimeUnit.SECONDS.sleep(2);
//離開車位
System.out.println(Thread.currentThread().getName() + "離開車位");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//release()釋放
semaphore.release();
}
}).start();
}
}
}
到此這篇關(guān)于Java中的Semaphore信號量簡單使用代碼實例的文章就介紹到這了,更多相關(guān)Semaphore信號量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot自帶的緩存@EnableCaching用法
這篇文章主要介紹了springboot自帶的緩存@EnableCaching用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Spring Boot應(yīng)用關(guān)閉分析詳解
本文挖掘了Spring Boot的關(guān)閉方式,并列舉了關(guān)閉方式,從原理、源碼的角度闡述了Spring Boot的關(guān)閉代碼及擴(kuò)展點,感興趣的朋友一起看看吧2024-12-12
SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解
這篇文章主要介紹了SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
SpringBoot整合Redis實現(xiàn)登錄失敗鎖定功能(實例詳解)
本文我們已經(jīng)探討如何利用Redis來實現(xiàn)鎖定賬戶的安全措施,以及通過SpringBoot整合Redis實現(xiàn)了這一功能,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧2024-02-02
WIN10環(huán)境 Maven的安裝與配置詳細(xì)教程
這篇文章主要介紹了WIN10環(huán)境 Maven的安裝與配置詳細(xì)教程,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

