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

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

Java信號量全解析

瀏覽:170日期: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久久,三上悠亚国产精品一区二区三区
四虎国产精品免费观看| 日av在线不卡| 日韩有码av| 日韩欧乱色一区二区三区在线| 亚洲综合三区| 日本国产精品| 国产精品综合色区在线观看| 日韩一区二区三区四区五区| 另类av一区二区| 亚欧洲精品视频在线观看| 美国欧美日韩国产在线播放| 亚洲久草在线| 日韩国产在线| 奇米狠狠一区二区三区| 美女视频黄久久| 亚洲精品观看| 欧美中文字幕| 国产激情一区| 欧美日韩国产探花| 日本aⅴ免费视频一区二区三区| 人人爱人人干婷婷丁香亚洲| 高清日韩欧美| 日本成人在线不卡视频| 午夜精品久久久久久久久久蜜桃| 影音先锋久久精品| 国产一区二区三区国产精品| 每日更新成人在线视频| 免费的成人av| 国产一区日韩一区| 在线手机中文字幕| 欧美日韩在线网站| 一区二区三区国产在线| 日韩精品福利一区二区三区| 91亚洲精品在看在线观看高清 | 日产欧产美韩系列久久99| 国产情侣久久| 老色鬼精品视频在线观看播放| 中文字幕系列一区| 国产精品视频一区二区三区四蜜臂| 黄色在线一区| 日韩精品国产精品| 少妇精品久久久一区二区| 日韩午夜精品| 成人一区而且| 亚洲国产一区二区三区在线播放 | 久久亚洲资源中文字| jiujiure精品视频播放| 精品视频高潮| 日本а中文在线天堂| 色综合五月天| 免费黄网站欧美| 国产乱码精品一区二区三区亚洲人| 国产探花一区| 午夜亚洲福利| 国产精品福利在线观看播放| 精品国产一区二区三区av片| 久久精品国产99久久| 日韩一区精品视频| 午夜亚洲精品| 日本а中文在线天堂| 香蕉精品视频在线观看| 国产精品国产三级国产在线观看| 欧美日韩国产高清| 久久免费国产| 国产精品115| 成人午夜精品| 国产欧美日韩视频在线| 国产精品久久久久9999高清| 在线观看一区| 精品久久电影| 欧美影院三区| 久久99久久久精品欧美| 91免费精品| 久久国产欧美| 国产精品777777在线播放| 欧美日韩国产高清| 视频在线在亚洲| 精品国产亚洲日本| 久久中文字幕一区二区三区| 国产美女久久| 丝袜亚洲精品中文字幕一区| 在线一区免费| 日韩国产在线观看一区| 色综合www| 欧美1区二区| 久久精品成人| 精品国产一区二区三区噜噜噜| 欧美精品资源| 国产亚洲精品美女久久| 国产亚洲字幕| 青青青国产精品| 99视频精品全部免费在线视频| 成人污污视频| 亚洲一区中文| 日韩一区二区免费看| 激情久久一区二区| 精品一区二区三区中文字幕| 日韩精品视频一区二区三区| 鲁大师精品99久久久| 久久裸体视频| 精精国产xxxx视频在线播放| 中文字幕一区二区精品区| 91精品精品| 国产精品xxx| 99视频一区| 日本综合视频| 日韩精品一级| 国产精品4hu.www| re久久精品视频| 亚洲一区区二区| 国产aⅴ精品一区二区三区久久 | 久久一区国产| 免费看av不卡| 午夜亚洲一区| 国产一区二区亚洲| 久久人人88| 免费高清在线一区| 国产精品白丝一区二区三区| 在线 亚洲欧美在线综合一区| 日本成人中文字幕| 午夜在线视频一区二区区别| 手机在线电影一区| 国产精品嫩草99av在线| 美女久久网站| 麻豆国产欧美一区二区三区| 国产中文欧美日韩在线| 国产91在线播放精品| 日韩欧美四区| 另类专区亚洲| 久久狠狠亚洲综合| 今天的高清视频免费播放成人| 亚洲美女久久| 日韩欧美久久| 红桃视频国产一区| 国产精品嫩模av在线| 你懂的国产精品永久在线| 日本精品另类| 久久视频一区| 亚洲欧美日韩一区在线观看| 亚洲激情五月| 超碰在线99| 日韩高清一区| 国产精品av久久久久久麻豆网| 国产精品欧美在线观看| 久久蜜桃精品| 日产午夜精品一线二线三线| 99综合视频| 成人va天堂| 国产精品www994| 四虎精品一区二区免费| 欧美国产不卡| 综合激情婷婷| 欧美69视频| 欧美一级久久| 给我免费播放日韩视频| 9国产精品视频| 激情欧美国产欧美| 在线国产精品一区| 欧美日韩网址| 欧美精品国产| 国产成年精品| 久久国产精品成人免费观看的软件| 国产精品丝袜在线播放| 国产 日韩 欧美 综合 一区| 久久成人av| 久久精品导航| 久久久一本精品| 亚洲一级淫片| 中文字幕高清在线播放| 午夜欧美精品| 日韩av不卡一区二区| 国产日韩免费| 欧美成人一二区| 亚洲综合激情在线| 欧美激情一区| 国产高潮在线| 精品资源在线| 爽爽淫人综合网网站| 久久麻豆精品| 美女福利一区二区三区| 综合干狼人综合首页| 综合亚洲自拍| 精品国产91| 欧美亚洲精品在线| 亚洲精品a级片| 亚洲精品影视| 日韩va欧美va亚洲va久久| 国产日产一区| 色吊丝一区二区| 国产亚洲精品v| 国产精品毛片视频| 久久久夜夜夜| 私拍精品福利视频在线一区| 国产a亚洲精品| 91亚洲国产| 欧美www视频在线观看| 免费在线欧美黄色| 精品美女视频| 三级欧美韩日大片在线看| 日韩av二区|