一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java并發(fā)編程之Semaphore(信號(hào)量)詳解及實(shí)例

Java并發(fā)編程之Semaphore(信號(hào)量)詳解及實(shí)例

2020-11-09 15:32feinik Java教程

這篇文章主要介紹了Java并發(fā)編程之Semaphore(信號(hào)量)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

Java并發(fā)編程Semaphore信號(hào)量)詳解及實(shí)例

概述

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

主要方法

1、構(gòu)造方法

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

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

2、普通方法

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

3、 我們來(lái)模擬客戶(hù)在銀行辦理業(yè)務(wù)的場(chǎng)景示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 + "】個(gè)客戶(hù)辦理業(yè)務(wù),需要時(shí)間:" + time + "s!");
        Thread.sleep(time * 1000);
        if (availableWindow.hasQueuedThreads()) {
         System.out.println("第【" + num + "】個(gè)客戶(hù)已辦理完業(yè)務(wù),有請(qǐng)下一位!");
        } else {
         System.out.println("第【" + num + "】個(gè)客戶(hù)已辦理完業(yè)務(wù),沒(méi)有客戶(hù)了,休息中!");
        }
        availableWindow.release();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
     }
   };
 
   for (int i = 1; i < 10; i++) {
     new Thread(customer).start();
   }
  }
}

4、運(yùn)行結(jié)果

Java并發(fā)編程之Semaphore(信號(hào)量)詳解及實(shí)例

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

原文鏈接:https://my.oschina.net/feinik/blog/911138

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本福利视频网站 | 任我行视频在线观看国语 | 双性受合不垅腿攻np | 久草热8精品视频在线观看 久草草在线视视频 | 色老汉 | asian4you裸模| ysl千人千色t9t9t9| 欧美性高清另类videosex死尸 | 亚洲国产精品综合久久一线 | 精品免费久久久久久成人影院 | 久久国产视频网 | 18young第一次 | 欧美高清3dfreexxxx性 | bbox撕裂bass孕妇 | 91影视永久福利免费观看 | 亚洲电影成人 成人影院 | 91久色 | 国产在线精品亚洲第一区香蕉 | 日本妇人成熟免费不卡片 | 色老板美国在线观看 | 公共场合高h短篇 | 福利视频导航大全 | 国产亚洲高清国产拍精品 | 情欲满载2012美国dvd | 亚洲精品国偷拍自产在线观看蜜臀 | www.久久99| 高清视频大片免费观看 | www视频免费看 | 欧美日韩精品乱国产538 | 国产午夜精品福利久久 | t66y地址一地址二地址三 | 希望影院高清免费观看视频 | www.色呦呦.com | 性bbbbwwbbbb| 色在线亚洲视频www 色欲麻豆国产福利精品 | 99久久精品99999久久 | 日本色女 | 亚洲国产自拍在线 | 青草免费在线观看 | 亚洲+国产+图片 | 性一交一无一伦一精一品 |