亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

概述

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

主要方法

1、構造方法

      Semaphore提供了一個帶有boolean參數的構造方法,true代表公平鎖,false代表非公平鎖,默認實現是非公平鎖

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

2、普通方法

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

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

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è)務,需要時間:" + time + "s!");
        Thread.sleep(time * 1000);
        if (availableWindow.hasQueuedThreads()) {
         System.out.println("第【" + num + "】個客戶已辦理完業(yè)務,有請下一位!");
        } else {
         System.out.println("第【" + num + "】個客戶已辦理完業(yè)務,沒有客戶了,休息中!");
        }
        availableWindow.release();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
     }
   };

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

4、運行結果

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

相關文章

  • 基于java枚舉類綜合應用的說明

    基于java枚舉類綜合應用的說明

    一個枚舉類,可以看成包括它的一些子類(枚舉)的一個類,而且枚舉類的構造方法只能是私有的
    2013-05-05
  • 關于Java的二叉樹、紅黑樹、B+樹詳解

    關于Java的二叉樹、紅黑樹、B+樹詳解

    這篇文章主要介紹了關于Java的二叉樹、紅黑樹、B+樹詳解,能同時具備數組查找快的優(yōu)點以及鏈表插入和刪除快的優(yōu)點的數據結構就是樹,需要的朋友可以參考下
    2023-05-05
  • SpringBoot集成FastDFS依賴實現文件上傳的示例

    SpringBoot集成FastDFS依賴實現文件上傳的示例

    這篇文章主要介紹了SpringBoot集成FastDFS依賴實現文件上傳,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Java 獲取properties的幾種方式

    Java 獲取properties的幾種方式

    這篇文章主要介紹了Java 獲取properties的幾種方式,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-04-04
  • 詳解Java實現LRU緩存

    詳解Java實現LRU緩存

    這篇文章主要介紹了詳解Java實現LRU緩存,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Springmvc ViewResolver設計實現過程解析

    Springmvc ViewResolver設計實現過程解析

    這篇文章主要介紹了Springmvc ViewResolver設計實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • java回調機制實例詳解

    java回調機制實例詳解

    這篇文章主要介紹了java回調機制實例詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • Java使用Servlet生成驗證碼圖片

    Java使用Servlet生成驗證碼圖片

    這篇文章主要為大家詳細介紹了Java使用Servlet生成驗證碼圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解Java的Struts框架中棧值和OGNL的使用

    詳解Java的Struts框架中棧值和OGNL的使用

    這篇文章主要介紹了Java的Struts框架中棧值和OGNL的使用,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • 一篇文章帶你了解Java 中序列化與反序列化

    一篇文章帶你了解Java 中序列化與反序列化

    這篇文章主要介紹了Java 序列化與反序列化(Serialization),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07

最新評論