org.castor.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();
}
}
[ Introduction to this package. ]
See Also: java.util.concurrent.locks.ReentrantLock
| 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() |