| java.lang.Object com.ibm.icu.impl.ICURWLock
ICURWLock | public class ICURWLock (Code) | | A simple Reader/Writer lock. This assumes that there will
be little writing contention. It also doesn't allow
active readers to acquire and release a write lock, or
deal with priority inversion issues.
Access to the lock should be enclosed in a try/finally block
in order to ensure that the lock is always released in case of
exceptions:
try {
lock.acquireRead();
// use service protected by the lock
}
finally {
lock.releaseRead();
}
The lock provides utility methods getStats and clearStats
to return statistics on the use of the lock.
|
Inner Class :final public static class Stats | |
Method Summary | |
public void | acquireRead() Acquire a read lock, blocking until a read lock is
available. | public void | acquireWrite() Acquire the write lock, blocking until the write lock is
available. | public synchronized Stats | clearStats() Clear the stats (stop collecting stats). | public synchronized Stats | getStats() Return a snapshot of the current stats. | public void | releaseRead() Release a read lock and return. | public void | releaseWrite() Release the write lock and return. | public synchronized Stats | resetStats() Reset the stats. |
acquireRead | public void acquireRead()(Code) | | Acquire a read lock, blocking until a read lock is
available. Multiple readers can concurrently hold the read
lock.
If there's a writer, or a waiting writer, increment the
waiting reader count and block on this. Otherwise
increment the active reader count and return. Caller must call
releaseRead when done (for example, in a finally block).
|
acquireWrite | public void acquireWrite()(Code) | | Acquire the write lock, blocking until the write lock is
available. Only one writer can acquire the write lock, and
when held, no readers can acquire the read lock.
If there are no readers and no waiting writers, mark as
having an active writer and return. Otherwise, add a lock to the
end of the waiting writer list, and block on it. Caller
must call releaseWrite when done (for example, in a finally
block).
|
clearStats | public synchronized Stats clearStats()(Code) | | Clear the stats (stop collecting stats). Returns existing stats, if any.
|
getStats | public synchronized Stats getStats()(Code) | | Return a snapshot of the current stats. This does not reset the stats.
|
releaseRead | public void releaseRead()(Code) | | Release a read lock and return. An error will be thrown
if a read lock is not currently held.
If this is the last active reader, notify the oldest
waiting writer. Call when finished with work
controlled by acquireRead.
|
releaseWrite | public void releaseWrite()(Code) | | Release the write lock and return. An error will be thrown
if the write lock is not currently held.
If there are waiting readers, make them all active and
notify all of them. Otherwise, notify the oldest waiting
writer, if any. Call when finished with work controlled by
acquireWrite.
|
resetStats | public synchronized Stats resetStats()(Code) | | Reset the stats. Returns existing stats, if any.
|
|
|