Java併發編程之同步計數器Semaphore

編程語言 Java 技術 進擊的程序猿 進擊的程序猿 2017-09-13

Semaphore是一個計數信號量。從概念上講,信號量維護一個許可集合。如有必要,在許可可用前會阻塞每一個acquire(),然後在獲取該許可。每個release()添加一個許可,從而可能釋放一個正在阻塞的獲取者。就像排隊進入上海博物館一樣,先放幾個人進去,等這幾個走了,然後在放幾個人進去,就像是一種排隊機制。

Semaphore主要的、常用的方法有:

  1. Semaphore(int permits),創建具有給定的許可數和給定的非公平的公平設置的Semaphore數量。

  2. Semaphore(int permits,boolean fair),創建具有給定的許可數和給定的公平設置的Semaphore數量

    所謂公平性就是是否先進來的先釋放,默認是否的

  3. void acquire(),從此信號量獲取一個許可,在提供一個許可前一職將線程阻塞,否則線程被中斷。

  4. void release(),釋放一個許可,將其返回給信號量。

  5. void release(int permits),釋放給定數目的許可,將其返回到信號量

使用場景:

排隊場景,資源有限的房間,資源有限的群等等。常見的實際應用場景包括線程池、連接池等。

實例:

假設一個服務器資源有限,只允許3個人進行訪問,一共來了10個人的場景。

Java併發編程之同步計數器Semaphore

運行結果如下:

Java併發編程之同步計數器Semaphore

相關推薦

推薦中...