《JAVA併發程式設計核心方法與框架》讀書筆記之Semaphore

《JAVA併發程式設計核心方法與框架》讀書筆記之Semaphore

Semaphore

synchronized的升級版(PV),想想 “紅綠燈”,用於控制流量

作用

控制thread “併發數量”

主要成員

new Semaphore

(int initPermits)

//初始許可數,可透過 release() 動態增加

acquire

(int permits)

//獲取N個許可 減法

release

()

//釋放一個許可,許可數量++

//注:

可以持續釋放

,而無視new Semaphore(初始許可數)

acquireUninterruptibly()

//執行緒不允許被中斷

acquireUninterruptibly

(int permits)

//執行緒不允許被中斷

availablePermits()

//返回“可用許可數”,通常用於

除錯

,因其隨時可變

drainPermits()

//抽乾 “所有” 許可證,可用數 == 0

getQueueLength()

// 等待佇列中的thread個數:獲取許可等待佇列

hasQueuedThreads()

// 判斷:是否有thread在等待這個許可

tryAcquire

(int permits)

// try字輩兒的,都不 阻塞,有就有,沒有就拉倒,馬上返回給你一個True或False結果

tryAcquire

(long timeout, TimeUnit unit)

// 帶超時時間的,還是不阻塞,到點就返回

使用1:同步性

訊號(許可) = 1

new Semaphore(1); //許可 == 1

sp。acquire(); //獲取:許可 -

……

sp。release(); //釋放:許可 +

頂部