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

Java并發(fā)編程之Semaphore(信號量)詳解及實例

 更新時間:2017年06月05日 15:21:42   投稿:lqh  
這篇文章主要介紹了Java并發(fā)編程之Semaphore(信號量)詳解及實例的相關(guān)資料,需要的朋友可以參考下

Java并發(fā)編程之Semaphore(信號量)詳解及實例

概述

通常情況下,可能有多個線程同時訪問數(shù)目很少的資源,如客戶端建立了若干個線程同時訪問同一數(shù)據(jù)庫,這勢必會造成服務(wù)端資源被耗盡的地步,那么怎樣能夠有效的來控制不可預知的接入量呢?及在同一時刻只能獲得指定數(shù)目的數(shù)據(jù)庫連接,在JDK1.5 java.util.concurrent 包中引入了Semaphore(信號量),信號量是在簡單上鎖的基礎(chǔ)上實現(xiàn)的,相當于能令線程安全執(zhí)行,并初始化為可用資源個數(shù)的計數(shù)器,通常用于限制可以訪問某些資源(物理或邏輯的)的線程數(shù)目。例如我們可以將一個信號量初始化為可獲得的數(shù)據(jù)庫連接個數(shù)。一旦某個線程獲得了信號量,可獲得的數(shù)據(jù)庫連接數(shù)減1。線程消耗完資源并釋放該資源時,計數(shù)器就會加1。當信號量控制的所有資源都已被占用時,若有線程試圖訪問此信號量,則會進入阻塞狀態(tài),直到有可用資源被釋放。簡單理解就是:如去銀行辦理業(yè)務(wù),只有6個窗口,所以可同時給6個客戶辦理業(yè)務(wù),其他客戶只能等待,當有其中一個窗口辦理完業(yè)務(wù)時就會通知下一個客戶辦理。

主要方法

1、構(gòu)造方法

      Semaphore提供了一個帶有boolean參數(shù)的構(gòu)造方法,true代表公平鎖,false代表非公平鎖,默認實現(xiàn)是非公平鎖

  • Semaphore(int permits) //創(chuàng)建具有給定許可數(shù)的非公平Semaphore
  • Semaphore(int permits, boolean fair) //創(chuàng)建具有給定許可數(shù)的公平(true)或非公平(false)Semaphore

2、普通方法

  • public void acquire() //從此信號量獲取一個許可,在提供一個許可前一直將線程阻塞,否則線程被 中斷
  • public void acquire(int permits) //從此信號量獲取給定數(shù)目的許可,在提供這些許可前一直將線程阻塞,或者線程已被中斷
  • public void release() //釋放一個許可,將可用的許可數(shù)增加 1
  • public void release(int permits) //釋放給定數(shù)目的許可,將其返回到信號量
  • public boolean isFair() //如果此信號量的公平設(shè)置為 true,則返回 true

3、 我們來模擬客戶在銀行辦理業(yè)務(wù)的場景示例

import java.util.Random;
import java.util.concurrent.Semaphore;

public class BankService {

  public static void main(String[] args) {
   Runnable customer = new Runnable() {
     final Semaphore availableWindow = new Semaphore(5, true);
     int count = 1;
     @Override
     public void run() {
      int time = (int) (Math.random() * 10 + 3);
      int num = count++;
      try {
        availableWindow.acquire();
        System.out.println("正在為第【" + num + "】個客戶辦理業(yè)務(wù),需要時間:" + time + "s!");
        Thread.sleep(time * 1000);
        if (availableWindow.hasQueuedThreads()) {
         System.out.println("第【" + num + "】個客戶已辦理完業(yè)務(wù),有請下一位!");
        } else {
         System.out.println("第【" + num + "】個客戶已辦理完業(yè)務(wù),沒有客戶了,休息中!");
        }
        availableWindow.release();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
     }
   };

   for (int i = 1; i < 10; i++) {
     new Thread(customer).start();
   }
  }
}

4、運行結(jié)果

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Struts之logic標簽庫詳解

    Struts之logic標簽庫詳解

    本文就Struts之logic標簽庫進行詳細介紹,需要的朋友可以參考下
    2012-11-11
  • SpringBoot學習系列之MyBatis Plus整合封裝的實例詳解

    SpringBoot學習系列之MyBatis Plus整合封裝的實例詳解

    MyBatis-Plus是一款MyBatis的增強工具(簡稱MP),為簡化開發(fā)、提高效率,這篇文章給大家介紹MyBatis Plus整合封裝的實例詳解,感興趣的朋友跟隨小編一起看看吧
    2020-08-08
  • java中生成任意之間數(shù)的隨機數(shù)詳解

    java中生成任意之間數(shù)的隨機數(shù)詳解

    這篇文章主要介紹了java中生成任意之間數(shù)的隨機數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Protobuf的簡要介紹及使用詳解

    Protobuf的簡要介紹及使用詳解

    這篇文章主要介紹了Protobuf的簡要介紹及使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 一文詳解Reactor模型與實現(xiàn)示例

    一文詳解Reactor模型與實現(xiàn)示例

    這篇文章主要為大家介紹了Reactor模型與實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 關(guān)于JWT之token令牌認證登錄

    關(guān)于JWT之token令牌認證登錄

    這篇文章主要介紹了關(guān)于JWT之token令牌認證登錄,使用JWT能夠保證Token的安全性,且能夠進行Token時效性的檢驗,使用JWT時,登錄成功后將用戶信息生成一串令牌字符串,需要的朋友可以參考下
    2023-05-05
  • MyBatis-Plus3.x版本使用入門和踩過的坑

    MyBatis-Plus3.x版本使用入門和踩過的坑

    Mybatis-Plus是Mybatis的增強版,他只是在Mybatis的基礎(chǔ)上增加了功能,且并未對原有功能進行任何的改動,本文給大家說一下MyBatis-Plus3.x版本使用入門和踩過的坑,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Spring Boot集成Druid查看配置是否生效的方法

    Spring Boot集成Druid查看配置是否生效的方法

    本文主要介紹了Spring Boot集成Druid查看配置是否生效的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 解決HttpServletRequest 流數(shù)據(jù)不可重復讀的操作

    解決HttpServletRequest 流數(shù)據(jù)不可重復讀的操作

    這篇文章主要介紹了解決HttpServletRequest 流數(shù)據(jù)不可重復讀的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解解決IDEA2020.1版本的lombok插件問題

    詳解解決IDEA2020.1版本的lombok插件問題

    這篇文章主要介紹了詳解解決IDEA2020.1版本的lombok插件問題。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論

临潭县| 淳化县| 焦作市| 错那县| 晋江市| 察隅县| 正镶白旗| 温宿县| 黎平县| 全椒县| 西乌珠穆沁旗| 祁连县| 太仓市| 威宁| 乐清市| 隆化县| 通榆县| 布尔津县| 呼图壁县| 常宁市| 丰原市| 桐庐县| 连江县| 土默特右旗| 巧家县| 岗巴县| 潼南县| 神木县| 天气| 潼南县| 六盘水市| 周口市| 普安县| 云龙县| 洪江市| 静海县| 宁都县| 裕民县| 塔城市| 息烽县| 安宁市|