1. 程式人生 > >十一、信號量控制Semaphore

十一、信號量控制Semaphore

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