org.castor.util.concurrent
public class WriterPreferenceReadWriteLock extends Object implements ReadWriteLock
The locks are NOT reentrant. In particular, even though it may appear to usually work OK, a thread holding a read lock should not attempt to re-acquire it. Doing so risks lockouts when there are also waiting writers.
| Nested Class Summary | |
|---|---|
| protected class | WriterPreferenceReadWriteLock.ReaderLock |
| protected abstract class | WriterPreferenceReadWriteLock.Signaller
Reader and Writer requests are maintained in two different wait sets, by
two different objects. |
| protected class | WriterPreferenceReadWriteLock.WriterLock |
| Field Summary | |
|---|---|
| protected long | activeReaders_ |
| protected Thread | activeWriter_ |
| protected WriterPreferenceReadWriteLock.ReaderLock | readerLock_ |
| protected long | waitingReaders_ |
| protected long | waitingWriters_ |
| protected WriterPreferenceReadWriteLock.WriterLock | writerLock_ |
| Method Summary | |
|---|---|
| protected boolean | allowReader() Override this method to change to reader preference * |
| protected void | cancelledWaitingReader() |
| protected void | cancelledWaitingWriter() |
| protected WriterPreferenceReadWriteLock.Signaller | endRead()
Called upon termination of a read. |
| protected WriterPreferenceReadWriteLock.Signaller | endWrite()
Called upon termination of a write. |
| Sync | readLock() |
| protected boolean | startRead() |
| protected boolean | startReadFromNewReader() |
| protected boolean | startReadFromWaitingReader() |
| protected boolean | startWrite() |
| protected boolean | startWriteFromNewWriter() |
| protected boolean | startWriteFromWaitingWriter() |
| Sync | writeLock() |