如何解析Java中的Semaphore信號量

本篇文章為大家展示了如何解析Java中的Semaphore信號量,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)蒼南免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

Semaphore (信號量)是由計算機科學(xué)家Dijkstra在1965年提出的,廣泛應(yīng)用不同的操作系統(tǒng),在管程提出之前信號量就是并發(fā)編程領(lǐng)域的霸主!幾乎所有并發(fā)的語言都支持信號量機制。


Semaphore 也有被翻譯成信號燈,因為其機制就像我們?nèi)粘I钪械募t綠燈,車輛的通行看紅綠燈,對應(yīng)編程世界的線程能不能執(zhí)行得看信號燈!


Semaphore 用來多線程互斥問題,相對于synchronized和Lock來說它允許多個線程訪問一個臨界區(qū)!例如各種池:數(shù)據(jù)庫連接池、對象池等,這些池的需求就是同一時刻允許多個線程同時使用連接池。


Semaphore的模型可以概括為一個計數(shù)器、一個等待隊列、三個方法。三個方法原子性分別是init()、down()、up();
init():設(shè)置計數(shù)器的初始值。
down():將計數(shù)器的值減一,如果減了一之后,計數(shù)器的值小于0,則當(dāng)前的線程被阻塞,否則繼續(xù)執(zhí)行。
up():將計數(shù)器的值加一,如果加了一之后,計數(shù)器的值小于等于0,則喚醒等待隊列中的一個線程,并且將它移除出等待隊列。(注意是小于等于0,不應(yīng)該理解為大于等于0,因為大于等于0表明此時沒有等待的線程,所以不會有喚醒這個操作。)

如何解析Java中的Semaphore信號量

簡單的理解就是Semaphore就是通過這三個方法來改變計數(shù)器,通過計數(shù)器的值來判斷此時的線程是應(yīng)該加入到等待隊列中等待還是成功執(zhí)行。


信號量模型也被稱為PV原語,也就是down和up操作最早稱為P操作和V操作,有些人還稱為semWait和semSignal。

在JAVA中信號量模型是由 java.util.concurrent.Semaphore 的實現(xiàn),并且down和up對應(yīng)的實現(xiàn)方法是acquire和release,我們來看下簡單的使用例子

如何解析Java中的Semaphore信號量

如果你想多讓幾個線程進去臨界區(qū),那么就把Semaphore構(gòu)造器中的1改為你想要的線程數(shù)。

可以理解為頒發(fā)許可證,比如想同時允許3個線程進入臨界區(qū),構(gòu)造器中的數(shù)就填3,理解為搞了3張許可證,然后頒發(fā)出去,誰拿到了許可證誰就能進臨界區(qū),進入臨界區(qū)后的線程搞完事了,就歸還許可證,然后出去。


Semaphore的內(nèi)部共存在Sync、NonfairSync、FairSync三個類。

NonfairSync與FairSync類繼承自Sync類,Sync類繼承自AbstractQueuedSynchronizer抽象類,也就Semaphore是依托于NonfairSync、FairSync來實現(xiàn)的。

如何解析Java中的Semaphore信號量

可以通過構(gòu)造函數(shù)來指定為公平鎖還是非公平鎖,公平的意思這個許可只會給按先來后到的順序給等待隊列中的線程。而非公平的意思就是對于任何申請許可的線程,都第一時間看是否有多余的許可,如果有則給此線程。

如何解析Java中的Semaphore信號量

差別就在于有沒hasQueuedPredecessors(),這個方法就是判斷當(dāng)前線程是否是等待隊列中的頭結(jié)點,如果不是,則不給于分配。

上述內(nèi)容就是如何解析Java中的Semaphore信號量,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享標(biāo)題:如何解析Java中的Semaphore信號量
新聞來源:http://www.muchs.cn/article40/ghgcho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、虛擬主機、關(guān)鍵詞優(yōu)化、App設(shè)計建站公司、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營