|
||||||||||
| 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 zero| Method Detail |
public void acquire()
throws java.lang.InterruptedException
acquire in interface Monitorjava.lang.InterruptedException
public boolean attempt(long msecs)
throws java.lang.InterruptedException
attempt in interface Monitormsecs - The number of milliseconds to wait for a permit
java.lang.InterruptedExceptionpublic void release()
release in interface Monitorpublic 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 | |||||||||