天天看點

SemaphoreTest

java api中Semaphore(信号量),用于控制有限資源的并發通路。API也非常好了解,不過有幾個需要注意的地方:

Semaphore是純粹的應用級控制“鎖”,使用簡單的volitale變量作為信号量資訊,通過acquire、release、reduce等顯式的可以修改此信号量數字。

它并沒有維護任何鎖,也不是控制reentrant的,它不會維護信号和thread的關系。

Semaphore的初始值可以為0,甚至可以為負數。對于acquire調用(信号down),它隻會比較現在信号值與0的大小關系,如果<=0那麼将不能獲得授權。

對于release(信号up),隻是簡單的對信号值進行原子增加,經過多次的release,信号值可以超過初始的閥值。

對于Semaphore(0/-N)的場景,有特殊的使用,這種信号控制,在可以acquire之前,必須經過約定的足夠多的release之後才可以被使用。

參考:http://stackoverflow.com/questions/1221322/how-does-semaphore-work