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(); } }
WriterPreferenceReadWriteLock.ReaderLock, WriterPreferenceReadWriteLock.Signaller, WriterPreferenceReadWriteLock.WriterLock
Modifier and Type | Field and Description |
---|---|
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 *
|
activeReaders_, activeWriter_, readerLock_, waitingReaders_, waitingWriters_, writerLock_
Constructor and Description |
---|
ReentrantWriterPreferenceReadWriteLock() |
Modifier and Type | Method and Description |
---|---|
protected boolean |
allowReader()
Override this method to change to reader preference *
|
protected WriterPreferenceReadWriteLock.Signaller |
endRead()
Called upon termination of a read.
|
protected WriterPreferenceReadWriteLock.Signaller |
endWrite()
Called upon termination of a write.
|
protected boolean |
startRead() |
protected boolean |
startWrite() |
cancelledWaitingReader, cancelledWaitingWriter, readLock, startReadFromNewReader, startReadFromWaitingReader, startWriteFromNewWriter, startWriteFromWaitingWriter, writeLock
protected long writeHolds_
protected HashMap readers_
protected static final Integer IONE
public ReentrantWriterPreferenceReadWriteLock()
protected boolean allowReader()
WriterPreferenceReadWriteLock
allowReader
in class WriterPreferenceReadWriteLock
protected boolean startRead()
startRead
in class WriterPreferenceReadWriteLock
protected boolean startWrite()
startWrite
in class WriterPreferenceReadWriteLock
protected WriterPreferenceReadWriteLock.Signaller endRead()
WriterPreferenceReadWriteLock
endRead
in class WriterPreferenceReadWriteLock
protected WriterPreferenceReadWriteLock.Signaller endWrite()
WriterPreferenceReadWriteLock
endWrite
in class WriterPreferenceReadWriteLock
Copyright © 2012. All Rights Reserved.