2009-09-02 61 views
4

我想了解drainPermits的在Java Semaphore類合同如果沒有許可證,Semaphor.drainPermits會做什麼?

的JavaDoc的只是讀取:

公衆詮釋drainPermits()

Acquire and return all permits that are immediately available. 

Returns: 
    the number of permits 

如果沒有許可證是目前可用,是否阻止並等到有人可用?

回答

9

不,它會立即返回0。它不需要任何許可證。

+0

因此,如果我正在審查代碼,看起來有人可能使用它來鎖定,他們會遇到一個令人討厭的驚喜,對吧? – Uri 2009-09-02 14:07:53

+1

這取決於他們在做什麼。 「使用它來鎖定」並不真正提供很多暗示。 – 2009-09-02 14:09:57

+0

如果它們初始化爲1並且使用drain執行 「tryAcquire」就沒有問題。 在許多不同的語言和系統中,(非嵌套)互斥鎖的許多實現都是一個初始化爲1的信號量。 – pgast 2009-09-03 01:52:41

相關問題