2009-09-02 6 views
4

Je suis en train de comprendre le contrat de drainPermits dans la classe Java SémaphoreQue fait Semaphor.drainPermits si aucun permis n'est disponible?

Le JavaDoc lit simplement:

drainPermits public int()

Acquire and return all permits that are immediately available. 

Returns: 
    the number of permits 

Si aucun permis ne actuellement disponible, bloque-t-il et attend jusqu'à ce que l'un soit disponible?

Répondre

9

Non, il renverra 0 immédiatement. Il ne nécessite aucun permis pour être disponible.

+0

Donc, si j'examine un code où il semble que quelqu'un l'ait utilisé pour le verrouillage, c'est une mauvaise surprise, n'est-ce pas? – Uri

+1

Cela dépend exactement de ce qu'ils font. "L'utiliser pour le verrouillage" ne donne pas vraiment un indice. –

+0

si elles l'initialisent à 1 et en utilisant drain pour mettre en œuvre un "tryAcquire" c'est bien. Dans de nombreux langages et systèmes, de nombreuses implémentations d'un mutex (non imbriqué) est un sémaphore initialisé à 1. – pgast