|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.metasyntactic.thread.concurrent.Semaphore
Base class for counting semaphores. Conceptually, a semaphore maintains a set of permits. Each acquire() blocks if necessary until a permit is available, and then takes it. Each release adds a permit. However, no actual permit objects are used; the Semaphore just keeps a count of the number available and acts accordingly.
A semaphore initialized to 1 can serve as a mutual exclusion lock.
Different implementation subclasses may provide different ordering guarantees (or lack thereof) surrounding which threads will be resumed upon a signal.
The default implementation makes NO guarantees about the order in which threads will acquire permits. It is often faster than other implementations.
Field Summary | |
protected long |
permits
current number of available permits |
Fields inherited from interface org.metasyntactic.thread.concurrent.Monitor |
ONE_CENTURY, ONE_DAY, ONE_HOUR, ONE_MINUTE, ONE_SECOND, ONE_WEEK, ONE_YEAR |
Constructor Summary | |
Semaphore(long permits)
Create a Semaphore with the given initial number of permits. |
Method Summary | |
void |
acquire()
Wait until a permit is available, and take one |
boolean |
attempt(long msecs)
Wait at most msecs millisconds for a permit. |
long |
permits()
Return the current number of available permits. |
void |
release()
Release a permit |
void |
release(long n)
Release N permits. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected long permits
Constructor Detail |
public Semaphore(long permits)
permits
- The number of permits to grant. Note! This number
can be negative, in which case no permits will be
released intil the number of releases pushes this
above zeroMethod Detail |
public void acquire() throws java.lang.InterruptedException
acquire
in interface Monitor
java.lang.InterruptedException
public boolean attempt(long msecs) throws java.lang.InterruptedException
attempt
in interface Monitor
msecs
- The number of milliseconds to wait for a permit
java.lang.InterruptedException
public void release()
release
in interface Monitor
public void release(long n)
release(n)
is
equivalent in effect to:
for (int i = 0; i < n; ++i) { release(); }
n
- The number of permits to release
java.lang.IllegalArgumentException
- if n is negative.public long permits()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |