org.castor.util.concurrent
Class ReentrantWriterPreferenceReadWriteLock
- ReadWriteLock
public class ReentrantWriterPreferenceReadWriteLock
A writer-preference ReadWriteLock that allows both readers and writers to
reacquire read or write locks in the style of a ReentrantLock. Readers are
not allowed until all write locks held by the writing thread have been
released. Among other applications, reentrancy can be useful when write locks
are held during calls or callbacks to methods that perform reads under read
locks.
Sample usage . Here is a code sketch showing how to exploit reentrancy
to perform lock downgrading after updating a cache:
class CachedData {
Object data;
volatile boolean cacheValid;
ReentrantWriterPreferenceReadWriteLock rwl = ...
void processCachedData() {
rwl.readLock().acquire();
if (!cacheValid) {
// upgrade lock:
rwl.readLock().release(); // must release first to obtain writelock
rwl.writeLock().acquire();
if (!cacheValid) { // recheck
data = ...
cacheValid = true;
}
// downgrade lock
rwl.readLock().acquire(); // reacquire read without giving up lock
rwl.writeLock().release(); // release write, still hold read
}
use(data);
rwl.readLock().release();
}
}
[
Introduction to this package. ]
"java.util.concurrent.locks.ReentrantLock in Java 5 or later JavaDoc"
protected static Integer | IONE - cache/reuse the special Integer value one to speed up readlocks *
|
protected HashMap | readers_ - Number of acquires on read lock by any reader thread *
|
protected long | writeHolds_ - Number of acquires on write lock by activeWriter_ thread *
|
allowReader , cancelledWaitingReader , cancelledWaitingWriter , endRead , endWrite , readLock , startRead , startReadFromNewReader , startReadFromWaitingReader , startWrite , startWriteFromNewWriter , startWriteFromWaitingWriter , writeLock |
IONE
protected static final Integer IONE
cache/reuse the special Integer value one to speed up readlocks *
readers_
protected HashMap readers_
Number of acquires on read lock by any reader thread *
writeHolds_
protected long writeHolds_
Number of acquires on write lock by activeWriter_ thread *
Intalio Inc. (C) 1999-2008. All rights reserved http://www.intalio.com