亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

java并發(fā)編程專題(六)----淺析(JUC)Semaphore

瀏覽:15日期:2022-08-30 08:31:10

半路開始看的朋友可以回顧一下前幾篇

java并發(fā)編程專題(一)----線程基礎(chǔ)知識

java并發(fā)編程專題(二)----如何創(chuàng)建并運行java線程

java并發(fā)編程專題(三)----詳解線程的同步

java并發(fā)編程專題(四)----淺談(JUC)Lock鎖

java并發(fā)編程專題(五)----詳解(JUC)ReentrantLock

Semaphore,從字面意義上我們知道他是信號量的意思。在java中,一個計數(shù)信號量維護(hù)了一個許可集。Semaphore 只對可用許可的號碼進(jìn)行計數(shù),并采取相應(yīng)的行動。拿到信號量的線程可以進(jìn)入代碼,否則就等待。通過acquire()和release()獲取和釋放訪問許可。

信號量Semaphore是一個控制訪問多個共享資源的計數(shù)器,它本質(zhì)上是一個“共享鎖”。

Java并發(fā)提供了兩種加鎖模式:共享鎖和獨占鎖。前面介紹的ReentrantLock就是獨占鎖。對于獨占鎖而言,它每次只能有一個線程持有,而共享鎖則不同,它允許多個線程并行持有鎖,并發(fā)訪問共享資源。

獨占鎖它所采用的是一種悲觀的加鎖策略, 對于寫而言為了避免沖突獨占是必須的,但是對于讀就沒有必要了,因為它不會影響數(shù)據(jù)的一致性。如果某個只讀線程獲取獨占鎖,則其他讀線程都只能等待了,這種情況下就限制了不必要的并發(fā)性,降低了吞吐量。而共享鎖則不同,它放寬了加鎖的條件,采用了樂觀鎖機制,它是允許多個讀線程同時訪問同一個共享資源的。

舉一個生活中的例子,有一條單行道路口有一紅綠燈在正常的綠燈時間內(nèi)如果騎車速度都很平均只能過去20輛車,這就意味著排在前面的20輛肯定能過去紅綠燈,后面的就只能等下一個綠燈了。但是如果這個時候有車不想過去這個路口它駛向了邊上別的路,那么后面的車就有機會。下面我們來看一個簡單的例子:

public class TestSemaphore { public static void main(String[] args) { final Semaphore semaphore = new Semaphore(5); ExecutorService executorService = Executors.newCachedThreadPool(); for(int i = 0;i<10;i++){ int j = 0; executorService.submit(new A('car'+(j++),semaphore),'Thread'+(j++)); //new Thread(new A('car'+(j++),semaphore),'Thread'+(j++)).start(); if(i == 5){ try { Thread.sleep(1000); System.out.println('最后還有'+semaphore.availablePermits()+'個許可可用'); } catch (InterruptedException e) { e.printStackTrace(); } } } System.out.println('最后還有'+semaphore.availablePermits()+'個許可可用'); } } class A implements Runnable{ String carName; private Semaphore semaphore; public A(String carName, Semaphore semaphore){ this.carName = carName; this.semaphore = semaphore; } public void getWay(){ System.out.println('this car is get the way' + Thread.currentThread().getName()); } public void run() { try { if(semaphore.availablePermits() > 0){ semaphore.acquire(); getWay(); semaphore.release(); }else{ System.out.println('請等待========'); } } catch (InterruptedException e) { e.printStackTrace(); } } }

以上就是java并發(fā)編程專題(六)----淺析(JUC)Semaphore的詳細(xì)內(nèi)容,更多關(guān)于JAVA Semaphore的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久国产在线观看 | 久久久免费精品 | 一级女性大黄生活片免费 | 国产精品成aⅴ人片在线观看 | 欧美日本韩国一区二区 | 亚洲第一黄色网址 | 欧美三级一级 | 国内外一级毛片 | 草草影院欧美 | 精品日本亚洲一区二区三区 | 最新lutube亚洲看片在线观看 | 午夜精品久久久久久影视riav | 一区二区三区网站 | 国产精品极品美女自在线看免费一区二区 | 黄短视频在线观看免费版 | 国产精品 主播精选 网红 | 久久精品国产72国产精福利 | 国产精品美女一区二区 | 国内精品久久久久久麻豆 | 天天看天天摸色天天综合网 | 国产一区二区三区四区在线污 | 亚洲欧美色欧另类欧 | 国产精品亚洲片在线花蝴蝶 | 色网址在线 | 久久综合九九亚洲一区 | 国产精品国产三级国产无毒 | 欧美一级高清免费a | 日本高清αv毛片免费 | 免费jizz在线播放视频 | 8888四色奇米在线观看免费看 | 黄片毛片大全 | 色天天综合久久久久综合片 | 日韩免费三级 | 日韩一区二区精品久久高清 | 同性男男黄h片在线播放免费 | 日本乱人伦片中文三区 | 国内精品综合九九久久精品 | 三区在线观看 | 国产人妖在线观看一区二区 | 伊人影院综合网 | 亚洲岛国片 |