Java中的Semaphore信號(hào)量簡(jiǎn)單使用代碼實(shí)例
Semaphore信號(hào)量
Semaphore是用來(lái)保護(hù)一個(gè)或者多個(gè)共享資源的訪問(wèn),Semaphore內(nèi)部維護(hù)了一個(gè)計(jì)數(shù)器,其值為可以訪問(wèn)的共享資源的個(gè)數(shù)。
一個(gè)線程要訪問(wèn)共享資源,先獲得信號(hào)量,如果信號(hào)量的計(jì)數(shù)器值大于1,意味著有共享資源可以訪問(wèn),則使其計(jì)數(shù)器值減去1,再訪問(wèn)共享資源。
如果計(jì)數(shù)器值為0,線程進(jìn)入休眠。當(dāng)某個(gè)線程使用完共享資源后,釋放信號(hào)量,并將信號(hào)量?jī)?nèi)部的計(jì)數(shù)器加1,之前進(jìn)入休眠的線程將被喚醒并再次試圖獲得信號(hào)量。 例如:停車場(chǎng)的車位 ,有空閑車位才可以停,沒(méi)有空閑車位只能等待。 主要使用方法:
acquire() 從信號(hào)量獲取一個(gè)許可,在提供一個(gè)許可之前一直將線程阻塞 否則線程被中斷
release() 釋放一個(gè)許可,將其返回給信號(hào)量
例子: 停車場(chǎng)有五個(gè)停車位 有十輛車要停
public class SemaphoreDemo { public static void main(String[] args) { //參數(shù) 許可數(shù)量 例有五個(gè)空停車位 Semaphore semaphore = new Semaphore(5); //模擬10輛汽車 要停車 只能有五輛汽車同時(shí)停 其他車只能等待 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信號(hào)量簡(jiǎn)單使用代碼實(shí)例的文章就介紹到這了,更多相關(guān)Semaphore信號(hào)量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解基于java的Socket聊天程序——客戶端(附demo)
這篇文章主要介紹了詳解基于java的Socket聊天程序——客戶端(附demo),客戶端設(shè)計(jì)主要分成兩個(gè)部分,分別是socket通訊模塊設(shè)計(jì)和UI相關(guān)設(shè)計(jì)。有興趣的可以了解一下。2016-12-12Java文件過(guò)濾器實(shí)現(xiàn)按條件篩選文件
本文主要介紹了Java文件過(guò)濾器實(shí)現(xiàn)按條件篩選文件,文件過(guò)濾器是在文件處理中起到重要作用的工具,它可以用來(lái)篩選文件并根據(jù)特定的條件進(jìn)行過(guò)濾,下面就來(lái)介紹一下2024-04-04Java單例模式利用HashMap實(shí)現(xiàn)緩存數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Java單例模式利用HashMap實(shí)現(xiàn)緩存數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Spring Boot Admin實(shí)現(xiàn)服務(wù)健康預(yù)警功能
這篇文章主要介紹了Spring Boot Admin實(shí)現(xiàn)服務(wù)健康預(yù)警功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析
這篇文章主要為大家介紹了Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03Java Stream的基本概念以及創(chuàng)建方法
這篇文章主要介紹了Java Stream的基本概念以及創(chuàng)建方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-08-08springboot vue完成編輯頁(yè)面發(fā)送接口請(qǐng)求功能
這篇文章主要為大家介紹了springboot+vue完成編輯頁(yè)發(fā)送接口請(qǐng)求功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05