Package com.tangosol.util
Class ThreadGateLite<R>
java.lang.Object
com.tangosol.util.ThreadGateLite<R>
- All Implemented Interfaces:
com.oracle.coherence.common.util.Gate<R>
,Gate<R>
ThreadGateLite is a Gate implementation built around the
ReentrantReadWriteLock
.- Since:
- Coherence 3.7
- Author:
- coh 2010.08.09
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
Bar represents the state of thebars
placed on this gate. -
Field Summary
-
Constructor Summary
ConstructorDescriptionDefault constructor.ThreadGateLite
(R resource) Construct a ThreadGateLite protected the specified resource. -
Method Summary
Modifier and TypeMethodDescriptionprotected 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.com.oracle.coherence.common.util.Sentry
<R> close()
Wait to close the gate.boolean
close
(long cMillis) Close the gate.com.oracle.coherence.common.util.Sentry
<R> enter()
Wait to enter 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
Determine if the calling thread has closed the gate and continues to hold exclusive access.boolean
Determines if the current thread has entered the gate and not yet exited.void
open()
Re-open the closed gate.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.
-
Field Details
-
f_exitSentry
-
f_openSentry
-
-
Constructor Details
-
ThreadGateLite
public ThreadGateLite()Default constructor. -
ThreadGateLite
Construct a ThreadGateLite protected the specified resource.- Parameters:
resource
- the resource
-
-
Method Details
-
close
Description copied from interface:com.oracle.coherence.common.util.Gate
Wait to close the gate.- Specified by:
close
in interfacecom.oracle.coherence.common.util.Gate<R>
- Returns:
- an AutoCloseable which can be used with a try-with-resource block to perform the corresponding
Gate.open()
.
-
close
public boolean close(long cMillis) Close the gate. A thread uses this method to obtain exclusive access to the resource represented by the gate. Each invocation of this method must ultimately have a corresponding invocation of theGate.open()
method.- Specified by:
close
in interfacecom.oracle.coherence.common.util.Gate<R>
- Parameters:
cMillis
- maximum number of milliseconds to wait; pass -1 to wait indefinitely or 0 to return immediately- Returns:
- true iff entry into the gate was successfully closed by the calling thread and no other threads remain in the gate
-
enter
Description copied from interface:com.oracle.coherence.common.util.Gate
Wait to enter the gate.- Specified by:
enter
in interfacecom.oracle.coherence.common.util.Gate<R>
- Returns:
- an AutoCloseable which can be used with a try-with-resource block to perform the corresponding
Gate.exit()
.
-
enter
public boolean enter(long cMillis) Enter the gate. A thread uses this method to obtain non-exclusive access to the resource represented by the gate. Each invocation of this method must ultimately have a corresponding invocation of theGate.exit()
method.- Specified by:
enter
in interfacecom.oracle.coherence.common.util.Gate<R>
- Parameters:
cMillis
- maximum number of milliseconds to wait; pass -1 to wait indefinitely or 0 to return immediately- Returns:
- true iff the calling thread successfully entered the gate
-
exit
public void exit()Exit the gate. A thread must invoke this method corresponding to each invocation of theGate.enter()
method.- Specified by:
exit
in interfacecom.oracle.coherence.common.util.Gate<R>
-
isClosedByCurrentThread
public boolean isClosedByCurrentThread()Determine if the calling thread has closed the gate and continues to hold exclusive access.- Specified by:
isClosedByCurrentThread
in interfacecom.oracle.coherence.common.util.Gate<R>
- Returns:
- true iff the calling thread holds exclusive access to the gate
-
isClosed
public boolean isClosed()Determine if any thread has closed the gate and continues to hold exclusive access.- Specified by:
isClosed
in interfacecom.oracle.coherence.common.util.Gate<R>
- Returns:
- true iff there is a thread that holds exclusive access to the gate
-
isEnteredByCurrentThread
public boolean isEnteredByCurrentThread()Determines if the current thread has entered the gate and not yet exited.- Specified by:
isEnteredByCurrentThread
in interfacecom.oracle.coherence.common.util.Gate<R>
- Returns:
- true if the current thread has entered the gate
-
open
public void open()Re-open the closed gate. This method can be called only if the calling thread successfully closed the gate.- Specified by:
open
in interfacecom.oracle.coherence.common.util.Gate<R>
-
barEntry
public boolean barEntry(long cMillis) Bar entry to the thread gate by other threads, but do not wait for the gate to close. When all other threads have exited, the status of the thread gate will be closeable by the thread which barred entry. Threads that have already entered the gate at the time of this method call should be allowed to succeed in additional #enter calls.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() }
- Specified by:
barEntry
in interfacecom.oracle.coherence.common.util.Gate<R>
- Parameters:
cMillis
- maximum number of milliseconds to wait; pass -1 for forever or 0 for no wait- Returns:
- true iff entry into the thread gate was successfully barred by the calling thread
-
toString
-
waitForOpen
Wait for notification that the bar has been lifted completely, i.e. all re-entrant barEntry calls were matched. Seeopen()
.- Parameters:
bar
- the bar that needs to be lifted for this thread to proceed (cannot be null)cMillis
- time to wait or -1 for unlimited wait- Returns:
- the remaining wait time, or 0 if the wait time has expired
-
adjustWaitTime
protected long adjustWaitTime(long cMillis, long ldtStart) Calculate the time remaining from the total time allotted for an operation.- Parameters:
cMillis
- the total time allotted for an operationldtStart
- the start of the time interval that have passed- Returns:
- the remaining wait time in milliseconds. The value may be positive, zero for no time left or -1 for indefinite wait.
-