|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.mmbase.util.DijkstraSemaphore
public class DijkstraSemaphore
Also called counting semaphores, Dijkstra semaphores are used to control access to a set of resources. A Dijkstra semaphore has a count associated with it and each acquire() call reduces the count. A thread that tries to acquire() a Dijkstra semaphore with a zero count blocks until someone else calls release() thus increasing the count. When to use Recommended when applications require a counting semaphore. Implementing a counting semaphore using wait()/notify() and counters within your application code makes your code less readable and quickly increases the complexity (especially when you have the need for multiple counting semaphores). Can also be used to port code from POSIX environment.
| Constructor Summary | |
|---|---|
DijkstraSemaphore(int pMaxCount)
Creates a Dijkstra semaphore with the specified max count and initial count set to the max count (all resources released) |
|
DijkstraSemaphore(int pMaxCount,
int pInitialCount)
Creates a Dijkstra semaphore with the specified max count and an initial count of acquire() operations that are assumed to have already been performed. |
|
| Method Summary | |
|---|---|
void |
acquire()
If the count is non-zero, acquires a semaphore and decrements the count by 1, otherwise blocks until a release() is executed by some other thread. |
void |
acquireAll()
Tries to acquire all the semaphores thus bringing the count to zero. |
void |
release()
Releases a previously acquires semaphore and increments the count by one. |
void |
release(int pCount)
Same as release() except that the count is increased by pCount instead of 1. |
void |
releaseAll()
Releases all semaphores setting the count to max count. |
void |
starvationCheck()
This method blocks the calling thread until the count drops to zero. |
boolean |
tryAcquire()
Non-blocking version of acquire(). |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public DijkstraSemaphore(int pMaxCount)
pMaxCount - is the max semaphores that can be acquired
public DijkstraSemaphore(int pMaxCount,
int pInitialCount)
pMaxCount - is the max semaphores that can be acquiredpInitialCount - is the current count (setting it to zero means all semaphores
have already been acquired). 0 <= pInitialCount <= pMaxCount| Method Detail |
|---|
public void acquire()
throws InterruptedException
InterruptedException - if the thread is interrupted when blockedtryAcquire(),
acquireAll()public boolean tryAcquire()
public void release()
release(int pCount),
releaseAll()public void release(int pCount)
pCount - is the amount by which the counter should be incrementedrelease()
public void acquireAll()
throws InterruptedException
InterruptedException - if the thread is interrupted when blocked on this callacquire(),
releaseAll()public void releaseAll()
acquireAll()
public void starvationCheck()
throws InterruptedException
InterruptedException - if the thread is interrupted while waiting
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||