Java并發(fā)包之Semaphore信號(hào)量

信號(hào)量這個(gè)概念不太好理解

舉個(gè)??解釋:

以一個(gè)停車場(chǎng)是運(yùn)作為例悼尾。為了簡(jiǎn)單起見梭灿,假設(shè)停車場(chǎng)只有三個(gè)車位阴汇,一開始三個(gè)車位都是空的遭垛。這時(shí)如果同時(shí)來了五輛車尼桶,看門人允許其中三輛不受阻礙的進(jìn)入,然后放下車攔锯仪,剩下的車則必須在入口等待泵督,此后來的車也都不得不在入口處等待。這時(shí)庶喜,有一輛車離開停車場(chǎng)小腊,看門人得知后,打開車攔久窟,放入一輛秩冈,如果又離開兩輛,則又可以放入兩輛斥扛,如此往復(fù)入问。

在這個(gè)停車場(chǎng)系統(tǒng)中,車位是公共資源稀颁,每輛車好比一個(gè)線程芬失,看門人起的就是信號(hào)量的作用。

更進(jìn)一步匾灶,信號(hào)量的特性如下:信號(hào)量是一個(gè)非負(fù)整數(shù)(車位數(shù))棱烂,所有通過它的線程(車輛)都會(huì)將該整數(shù)減一(通過它當(dāng)然是為了使用資源),當(dāng)該整數(shù)值為零時(shí)粘昨,所有試圖通過它的線程都將處于等待狀態(tài)垢啼。在信號(hào)量上我們定義兩種操作: Wait(等待) 和 Release(釋放)。 當(dāng)一個(gè)線程調(diào)用Wait(等待)操作時(shí)张肾,它要么通過然后將信號(hào)量減一芭析,要么一直等下去,直到信號(hào)量大于一或超時(shí)吞瞪。Release(釋放)實(shí)際上是在信號(hào)量上執(zhí)行加操作馁启,對(duì)應(yīng)于車輛離開停車場(chǎng),該操作之所以叫做“釋放”是因?yàn)榧硬僮鲗?shí)際上是釋放了由信號(hào)量守護(hù)的資源。

白話文翻譯一遍:

就是Semaphore定義允許幾個(gè)線程共同訪問共同資源惯疙,比如翠勉,new Semaphore(3);

  // 獲取許可 - 最大允許3個(gè)進(jìn)入,一但超過就讓其等待,除非已經(jīng)釋放
  semp.acquire();  
  // 釋放許可 - 
  semp.release(); 

在java中霉颠,還可以設(shè)置該信號(hào)量是否采用公平模式对碌,如果以公平方式執(zhí)行,則線程將會(huì)按到達(dá)的順序(FIFO)執(zhí)行(也就是等待時(shí)間最長(zhǎng)的先執(zhí)行)蒿偎,如果是非公平朽们,則可以后請(qǐng)求的有可能排在隊(duì)列的頭部。

*JDK中定義如下:
Semaphore(int permits, boolean fair)

創(chuàng)建具有給定的許可數(shù)和給定的公平設(shè)置的Semaphore诉位。*

分析(10個(gè)線程骑脱,最大只允許5個(gè)訪問)

Thread pool-1-thread-1 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:1
Thread pool-1-thread-2 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:2
Thread pool-1-thread-3 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:3
Thread pool-1-thread-4 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:4
Thread pool-1-thread-5 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:5
Thread pool-1-thread-1 即將離開
Thread pool-1-thread-1 已經(jīng)離開,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:4
Thread pool-1-thread-6 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:5
Thread pool-1-thread-5 即將離開
Thread pool-1-thread-5 已經(jīng)離開苍糠,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:4
Thread pool-1-thread-7 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:5
Thread pool-1-thread-7 即將離開
Thread pool-1-thread-7 已經(jīng)離開叁丧,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:4
Thread pool-1-thread-8 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:5
Thread pool-1-thread-4 即將離開
Thread pool-1-thread-4 已經(jīng)離開,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:4
Thread pool-1-thread-9 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:5
Thread pool-1-thread-2 即將離開
Thread pool-1-thread-2 已經(jīng)離開岳瞭,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:4
Thread pool-1-thread-10 進(jìn)入當(dāng)前系統(tǒng)的并發(fā)數(shù)是:5
Thread pool-1-thread-3 即將離開
Thread pool-1-thread-3 已經(jīng)離開拥娄,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:4
Thread pool-1-thread-10 即將離開
Thread pool-1-thread-10 已經(jīng)離開,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:3
Thread pool-1-thread-6 即將離開
Thread pool-1-thread-6 已經(jīng)離開寝优,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:2
Thread pool-1-thread-8 即將離開
Thread pool-1-thread-8 已經(jīng)離開条舔,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:1
Thread pool-1-thread-9 即將離開
Thread pool-1-thread-9 已經(jīng)離開枫耳,當(dāng)前系統(tǒng)的并發(fā)數(shù)是:0

  • 這個(gè)例子說明了乏矾,只有5個(gè)線程進(jìn)去了,當(dāng)線程1離開了后迁杨,線程6才進(jìn)去
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钻心,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铅协,更是在濱河造成了極大的恐慌捷沸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狐史,死亡現(xiàn)場(chǎng)離奇詭異痒给,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)骏全,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門苍柏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姜贡,你說我怎么就攤上這事试吁。” “怎么了楼咳?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵熄捍,是天一觀的道長(zhǎng)烛恤。 經(jīng)常有香客問我,道長(zhǎng)余耽,這世上最難降的妖魔是什么缚柏? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮碟贾,結(jié)果婚禮上船惨,老公的妹妹穿的比我還像新娘。我一直安慰自己缕陕,他們只是感情好粱锐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扛邑,像睡著了一般怜浅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔬崩,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天恶座,我揣著相機(jī)與錄音,去河邊找鬼沥阳。 笑死跨琳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桐罕。 我是一名探鬼主播脉让,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼功炮!你這毒婦竟也來了溅潜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤薪伏,失蹤者是張志新(化名)和其女友劉穎滚澜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫁怀,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡设捐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塘淑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萝招。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朴爬,靈堂內(nèi)的尸體忽然破棺而出即寒,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布母赵,位于F島的核電站逸爵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凹嘲。R本人自食惡果不足惜师倔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望周蹭。 院中可真熱鬧趋艘,春花似錦、人聲如沸凶朗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棚愤。三九已至搓萧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宛畦,已是汗流浹背瘸洛。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留次和,地道東北人反肋。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踏施,于是被迫代替她去往敵國(guó)和親石蔗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容