我有混淆量計數器和正式參數信號的方法,如信號量計數器和信號量方法之間的理解差異整數參數?
acquire(int parameter)
,acquireUninterptbly(int parameter)
,release(int parameter)
。
如果參數大於信號量計數器會發生什麼情況,反之亦然。
如果有人通過實時示例進行解釋會非常有幫助。
我有混淆量計數器和正式參數信號的方法,如信號量計數器和信號量方法之間的理解差異整數參數?
acquire(int parameter)
,acquireUninterptbly(int parameter)
,release(int parameter)
。
如果參數大於信號量計數器會發生什麼情況,反之亦然。
如果有人通過實時示例進行解釋會非常有幫助。
A Semaphore
有一定數量的可用許可證。如果調用acquire(int permits)
,則將從信號量中獲取給定數量的許可證。如果信號量沒有足夠的許可證,該方法將阻止/暫停調用線程,直到有足夠的許可證可用。
如果在信號量上調用了release(int permits)
,給定數量的許可證返回給信號量。如果線程正在等待許可(由於阻止acquire
調用),它們被喚醒並嘗試獲得他們所請求的許可數量。
(在內部,許可證只是一個線程安全的數字計數器,減少或增加,永遠不能爲負)。
通常,aquire(int)
是可中斷,因此螺紋t
,即在aquire(int)
等待可以從另一個線程調用t.interrupt()
中斷。在這種情況下,阻止aquire
呼叫由InterruptedException
終止。如果使用方法aquireUninterruptibly
而不是acquire
,則這不起作用。
舉一個例子,看看的JavaDoc:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html有關許可證的最大數量
一兩件事:信號量初始化爲一定數量的可用許可,但這並不意味着這是最大它可以擁有的許可證數量。理論上講,一個線程可以釋放更多的許可證(甚至不需要先撥打acquire
即可發佈許可證)。因此允許調用aquire(int)
獲得比信號量初始化更多的許可證,並且要求release(int)
給出比信號量更多的許可證。這種調用的語義取決於程序員...
謝謝我有想法 –