public final class ThreadGateLite extends Object implements Gate
ReentrantReadWriteLock
.Modifier and Type | Class and Description |
---|---|
protected static class |
ThreadGateLite.Bar
Bar represents the state of the
bars placed on this gate. |
Constructor and Description |
---|
ThreadGateLite() |
Modifier and Type | Method and Description |
---|---|
protected long |
adjustWaitTime(long cMillis, long ldtStart)
Calculate the time remaining from the total time allotted for an operation.
|
boolean |
barEntry(long cMillis)
Bar entry to the thread gate by other threads, but do not wait for the gate to close.
|
boolean |
close(long cMillis)
Close the gate.
|
boolean |
enter(long cMillis)
Enter the gate.
|
void |
exit()
Exit the gate.
|
boolean |
isClosed()
Determine if any thread has closed the gate and continues to hold exclusive access.
|
boolean |
isClosedByCurrentThread()
Determine if the calling thread has closed the gate and continues to hold exclusive access.
|
boolean |
isEnteredByCurrentThread()
Determines if the current thread has entered the gate and not yet exited.
|
void |
open()
Re-open the closed gate.
|
String |
toString() |
protected long |
waitForOpen(ThreadGateLite.Bar bar, long cMillis)
Wait for notification that the bar has been lifted completely, i.e. all re-entrant barEntry calls were matched.
|
public boolean close(long cMillis)
Gate.open()
method.public boolean enter(long cMillis)
Gate.exit()
method.public void exit()
Gate.enter(long)
method.public boolean isClosedByCurrentThread()
isClosedByCurrentThread
in interface Gate
public boolean isClosed()
public boolean isEnteredByCurrentThread()
isEnteredByCurrentThread
in interface Gate
public void open()
public boolean barEntry(long cMillis)
Each successful invocation of this method must ultimately have a corresponding invocation of the open method (assuming the thread gate is not destroyed) even if the calling thread does not subsequently close the gate.
gate.barEntry(-1);
try
{
// processing that does not require the gate to be closed
// ...
}
finally
{
gate.close(-1);
try
{
// processing that does require the gate to be closed
// ...
}
finally
{
gate.open(); // matches gate.close()
}
gate.open(); // matches gate.barEntry()
}
protected long waitForOpen(ThreadGateLite.Bar bar, long cMillis)
open()
.bar
- the bar that needs to be lifted for this thread to proceed (cannot be null)cMillis
- time to wait or -1 for unlimited waitprotected long adjustWaitTime(long cMillis, long ldtStart)
cMillis
- the total time allotted for an operationldtStart
- the start of the time interval that have passed