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(); //釋放:許可 +