最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年07月01日 10:59:11   作者:rickiyang  
這篇文章主要介紹了java JUC)Semaphore的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下

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

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

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

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

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

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

Semaphore,從字面意義上我們知道他是信號量的意思。在java中,一個計數(shù)信號量維護了一個許可集。Semaphore 只對可用許可的號碼進行計數(shù),并采取相應的行動。拿到信號量的線程可以進入代碼,否則就等待。通過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的詳細內(nèi)容,更多關于JAVA Semaphore的資料請關注腳本之家其它相關文章!

相關文章

  • Spring bean不被GC的真正原因及分析

    Spring bean不被GC的真正原因及分析

    這篇文章主要介紹了Spring bean不被GC的真正原因及分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java設計模式之享元模式(Flyweight Pattern)詳解

    Java設計模式之享元模式(Flyweight Pattern)詳解

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設計模式,旨在減少對象的數(shù)量,以節(jié)省內(nèi)存空間和提高性能,本文將詳細的給大家介紹一下Java享元模式,需要的朋友可以參考下
    2023-07-07
  • JavaEE線程安全定時器模式任務

    JavaEE線程安全定時器模式任務

    這篇文章主要介紹了JavaEE線程安全定時器模式任務,定時器模式像是一個鬧鐘定時,在一定時間之后被喚醒并執(zhí)行某個之前設定好的任務,感興趣的小伙伴可以參考一下
    2022-06-06
  • springboot解決Class path contains multiple SLF4J bindings問題

    springboot解決Class path contains multiple 

    這篇文章主要介紹了springboot解決Class path contains multiple SLF4J bindings問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot微信消息接口配置詳解

    SpringBoot微信消息接口配置詳解

    這篇文章主要介紹了SpringBoot 微信消息接口配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-06-06
  • Java中反射詳解

    Java中反射詳解

    本文主要介紹了Java中反射的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java如何使用正則表達式從字符串中提取數(shù)字

    Java如何使用正則表達式從字符串中提取數(shù)字

    這篇文章主要介紹了Java如何使用正則表達式從字符串中提取數(shù)字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java詳解實現(xiàn)多線程的四種方式總結(jié)

    Java詳解實現(xiàn)多線程的四種方式總結(jié)

    哈哈!經(jīng)過一個階段的學習,Java基礎知識學習終于到多線程了!Java多線程以及后面互斥鎖的概念都是Java基礎學習的難點,所以我做了一個總結(jié),希望對大家也有幫助
    2022-07-07
  • SpringBoot使用工具類實現(xiàn)獲取容器中的Bean

    SpringBoot使用工具類實現(xiàn)獲取容器中的Bean

    這篇文章主要為大家詳細介紹了SpringBoot如何使用工具類實現(xiàn)獲取容器中的Bean,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • Springboot實現(xiàn)添加本地模塊依賴方式

    Springboot實現(xiàn)添加本地模塊依賴方式

    這篇文章主要介紹了Springboot實現(xiàn)添加本地模塊依賴方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論

通化市| 报价| 澄江县| 旬邑县| 淳化县| 原阳县| 武义县| 蒲江县| 南和县| 永州市| 青龙| 太和县| 岑巩县| 沁水县| 炎陵县| 九台市| 周口市| 榆林市| 丹阳市| 京山县| 武平县| 瑞金市| 临泉县| 扎赉特旗| 曲松县| 余庆县| 垦利县| 新津县| 汝州市| 临猗县| 景东| 云梦县| 教育| 德令哈市| 永昌县| 斗六市| 刚察县| 沧源| 长丰县| 黎平县| 玛多县|