EDU.oswego.cs.dl.util.concurrent
public class ReentrantWriterPreferenceReadWriteLock extends WriterPreferenceReadWriteLock
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(); } }
Field Summary | |
---|---|
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 * |
Method Summary | |
---|---|
protected boolean | allowReader() |
protected Signaller | endRead() |
protected Signaller | endWrite() |
protected boolean | startRead() |
protected boolean | startWrite() |