日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java信號量全解析

瀏覽:168日期:2022-08-17 17:56:02
前言:

Semaphore(信號量) 是一個線程同步結構,用于在線程間傳遞信號,以避免出現信號丟失(譯者注:下文會具體介紹),或者像鎖一樣用于保護一個關鍵區域。自從5.0開始,jdk在java.util.concurrent包里提供了Semaphore 的官方實現,因此大家不需要自己去實現Semaphore。但是還是很有必要去熟悉如何使用Semaphore及其背后的原理

內容主題:一、簡單的Semaphore實現

下面是一個信號量的簡單實現:

public class Semaphore {private boolean signal = false;public synchronized void take() {this.signal = true;this.notify();1011}public synchronized void release() throws InterruptedException{while(!this.signal) wait();this.signal = false;}}

Take方法發出一個被存放在Semaphore內部的信號,而Release方法則等待一個信號,當其接收到信號后,標記位signal被清空,然后該方法終止。

使用這個semaphore可以避免錯失某些信號通知。用take方法來代替notify,release方法來代替wait。如果某線程在調用release等待之前調用take方法,那么調用release方法的線程仍然知道take方法已經被某個線程調用過了,因為該Semaphore內部保存了take方法發出的信號。而wait和notify方法就沒有這樣的功能。

當用semaphore來產生信號時,take和release這兩個方法名看起來有點奇怪。這兩個名字來源于后面把semaphore當做鎖的例子,后面會詳細介紹這個例子,在該例子中,take和release這兩個名字會變得很合理。

二、使用Semaphore來產生信號

下面的例子中,兩個線程通過Semaphore發出的信號來通知對方

Semaphore semaphore = new Semaphore();SendingThread sender = new SendingThread(semaphore);ReceivingThread receiver = new ReceivingThread(semaphore);receiver.start();sender.start();public class SendingThread {Semaphore semaphore = null;public SendingThread(Semaphore semaphore){this.semaphore = semaphore;}public void run(){while(true){//do something, then signalthis.semaphore.take();}}}public class RecevingThread {Semaphore semaphore = null;public ReceivingThread(Semaphore semaphore){this.semaphore = semaphore;}public void run(){while(true){this.semaphore.release();//receive signal, then do something...}}}三、可計數的Semaphore

上面提到的Semaphore的簡單實現并沒有計算通過調用take方法所產生信號的數量。可以把它改造成具有計數功能的Semaphore。下面是一個可計數的Semaphore的簡單實現。

public class CountingSemaphore {private int signals = 0;public synchronized void take() {this.signals++;0809this.notify();}public synchronized void release() throws InterruptedException{while(this.signals == 0) wait();this.signals--;}}四、有上限的Semaphore

上面的CountingSemaphore并沒有限制信號的數量。下面的代碼將CountingSemaphore改造成一個信號數量有上限的BoundedSemaphore。

public class BoundedSemaphore {private int signals = 0;private int bound = 0;public BoundedSemaphore(int upperBound){this.bound = upperBound;}public synchronized void take() throws InterruptedException{while(this.signals == bound) wait();this.signals++;this.notify();}public synchronized void release() throws InterruptedException{while(this.signals == 0) wait();this.signals--;this.notify();}}

在BoundedSemaphore中,當已經產生的信號數量達到了上限,take方法將阻塞新的信號產生請求,直到某個線程調用release方法后,被阻塞于take方法的線程才能傳遞自己的信號。

五、把Semaphore當鎖來使用

當信號量的數量上限是1時,Semaphore可以被當做鎖來使用。通過take和release方法來保護關鍵區域。請看下面的例子:

BoundedSemaphore semaphore = new BoundedSemaphore(1);...semaphore.take();try{//critical section} finally {semaphore.release();}

在前面的例子中,Semaphore被用來在多個線程之間傳遞信號,這種情況下,take和release分別被不同的線程調用。但是在鎖這個例子中,take和release方法將被同一線程調用,因為只允許一個線程來獲取信號(允許進入關鍵區域的信號),其它調用take方法獲取信號的線程將被阻塞,知道第一個調用take方法的線程調用release方法來釋放信號。對release方法的調用永遠不會被阻塞,這是因為任何一個線程都是先調用take方法,然后再調用release。

通過有上限的Semaphore可以限制進入某代碼塊的線程數量。設想一下,在上面的例子中,如果BoundedSemaphore 上限設為5將會發生什么?意味著允許5個線程同時訪問關鍵區域,但是你必須保證,這個5個線程不會互相沖突。否則你的應用程序將不能正常運行。

必須注意,release方法應當在finally塊中被執行。這樣可以保在關鍵區域的代碼拋出異常的情況下,信號也一定會被釋放。

以上就是Java信號量全解析的詳細內容,更多關于Java信號量的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲少妇自拍| 日本欧美韩国一区三区| 日本va欧美va欧美va精品| 免费人成在线不卡| 亚洲精品一区二区妖精| 亚洲网站视频| 欧美在线影院| 岛国精品一区| 日本三级亚洲精品| 国产九九精品| 美女高潮久久久| 精品理论电影在线| 日韩精品麻豆| 在线综合亚洲| 亚洲精品国产日韩| 国产亚洲欧美日韩精品一区二区三区| 亚洲美女91| 国产亚洲精品精品国产亚洲综合| 国产九九精品| 高清不卡亚洲| 国产一区清纯| 蜜臀久久99精品久久久久久9| japanese国产精品| 首页亚洲欧美制服丝腿| 国产午夜精品一区二区三区欧美| 国产精品chinese| 亚洲一区二区小说| 亚洲综合色婷婷在线观看| 欧美综合二区| 久久精品天堂| 欧美91福利在线观看| 久久久久亚洲精品中文字幕| 日韩电影免费在线观看| 久久蜜桃av| 国产欧美三级| 亚洲二区三区不卡| 亚洲va中文在线播放免费| 在线国产一区| 久久视频精品| 精品欧美视频| 精品视频一区二区三区四区五区| 亚欧洲精品视频在线观看| 视频在线观看国产精品| 久久av一区二区三区| 日韩精品电影| 日本成人精品| 国产激情综合| 激情久久五月| 精品国产黄a∨片高清在线| 亚洲香蕉久久| 欧美久久亚洲| 国产精品久久久久久模特| 国产精品超碰| 日韩精品第二页| 日本亚洲不卡| 精品国产亚洲一区二区三区在线| 成人国产精选| 黄在线观看免费网站ktv| 一区二区三区四区精品视频| 欧美日韩日本国产亚洲在线 | 欧美久久香蕉| 米奇777超碰欧美日韩亚洲| 欧美日韩第一| 综合激情网...| 老牛影视精品| 欧美精品一区二区三区精品| 六月婷婷一区| 伊人久久成人| 日韩一二三区在线观看| 视频一区二区三区中文字幕| 国产日韩一区| 欧美日韩国产免费观看视频| 久久精品99国产国产精| 亚洲午夜视频| 国产亚洲人成a在线v网站| 欧美日韩第一| 老鸭窝一区二区久久精品| 蘑菇福利视频一区播放| 国产成年精品| 欧美~级网站不卡| 你懂的亚洲视频| 亚洲视频www| 高清一区二区三区| 青青草国产成人99久久| 欧美女激情福利| 国内精品麻豆美女在线播放视频| 蜜桃视频在线观看一区| 精品视频免费| 国产亚洲一卡2卡3卡4卡新区| 国产精品91一区二区三区| 久久精品国产999大香线蕉| 三级欧美韩日大片在线看| 国产精品成人a在线观看| 亚洲男人在线| 欧美久久精品一级c片| 精品黄色一级片| 日韩va欧美va亚洲va久久| 日韩一区二区免费看| 亚洲黄色中文字幕| 你懂的亚洲视频| 69堂精品视频在线播放| 亚洲激情偷拍| 三级小说欧洲区亚洲区| 国产日韩三级| 日韩综合小视频| 香蕉久久国产| 婷婷色综合网| 999久久久亚洲| 中文字幕成在线观看| 欧美日韩精品一区二区三区视频 | 麻豆国产精品| 91精品丝袜国产高跟在线| 亚洲免费一区二区| 久久精品av| 在线亚洲人成| 超级白嫩亚洲国产第一| 国产精品hd| 国产日韩欧美一区| 亚洲精品高潮| 亚洲三级视频| 亚洲永久字幕| 日韩免费福利视频| 国产成人精品一区二区免费看京| 国产免费av国片精品草莓男男| 少妇高潮一区二区三区99| 美女精品在线| 日韩一级精品| 久久xxxx| 最新国产精品视频| 亚洲影院天堂中文av色| 美女被久久久| 亚洲aa在线| 欧美综合精品| 国产精品1区在线| 欧美精品第一区| 欧美天堂一区| 国产欧美二区| 精品国产一级| 欧美国产一级| 91日韩欧美| 久久精品动漫| 五月婷婷六月综合| 午夜宅男久久久| 日韩欧美中文字幕一区二区三区 | 日韩亚洲精品在线| 在线 亚洲欧美在线综合一区| 亚洲免费网址| 日韩不卡免费视频| 老司机精品在线| 欧美aa在线观看| 午夜日韩福利| 最近国产精品视频| 国产欧美日韩影院| 国产精品xxx在线观看| 麻豆国产欧美日韩综合精品二区| 国产精品最新| 成人在线免费观看91| 久久蜜桃av| 亚洲香蕉久久| 久久精品国产99国产| 日本久久黄色| 久久久水蜜桃av免费网站| 蜜桃国内精品久久久久软件9| 在线亚洲激情| 午夜天堂精品久久久久| 国产欧美日韩一区二区三区在线| 国产精品一二| 亚洲天堂av影院| 国产亚洲福利| 日韩一区二区三区免费视频| 国产情侣久久| 色婷婷狠狠五月综合天色拍| 午夜在线视频观看日韩17c| 国产精区一区二区| 日韩精品水蜜桃| 亚洲欧美日韩国产综合精品二区| 日韩影片在线观看| 日韩av专区| 亚洲黄页一区| 久久丁香四色| 91精品电影| 国产精品亚洲人成在99www| 国产精品99一区二区三| 午夜在线一区| 精品国产午夜| 99精品综合| 日韩高清电影免费| 亚洲一级少妇| 无码日韩精品一区二区免费| 成人在线免费观看91| 五月天激情综合网| 国产精品手机在线播放| 日韩不卡视频在线观看| 亚洲ww精品| 欧美三级网址| 欧美日韩午夜电影网| 久久精品影视| 国产日韩一区二区三区在线播放 | 国产精品亚洲成在人线| 在线视频观看日韩|