十一、信號量控制Semaphore
阿新 • • 發佈:2018-12-24
upload pri sta 失敗 map 當前 spa jdk sem
一、簡介
有時候我們需要對一個資源的訪問做線程數控制,以防雪崩等問題。
JDK中,信號量可以處理這樣的問題:Semaphore
JDK文檔:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/Semaphore.html
信號量這種,類似於令牌桶算法。一個線程要訪問資源,先從桶裏面取令牌,得到令牌才可以執行,執行完畢了把令牌放回桶裏面。
二、代碼示例
import java.util.concurrent.Semaphore; public class SemaphoreDemo { /** * 設置信號量為1*/ private static Semaphore semaphore = new Semaphore(1); public static void main(String[] args) throws InterruptedException { // 當前信號量為1 System.out.println(semaphore.availablePermits()); // 信號量 -1 semaphore.acquire(); // 當前信號量為0 System.out.println(semaphore.availablePermits());// 嘗試獲取信號量失敗 System.out.println(semaphore.tryAcquire()); // 信號量不變,為0 System.out.println(semaphore.availablePermits()); // 釋放信號量 +1 semaphore.release(); // 信號量為1 System.out.println(semaphore); // 獲取信號量成功 System.out.println(semaphore.tryAcquire()); } }
十一、信號量控制Semaphore