## EDU.oswego.cs.dl.util.concurrent
Class WriterPreferenceReadWriteLock

    java.lang.Object
      EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock

All Implemented Interfaces:
  ReadWriteLock

Direct Known Subclasses:
  ReaderPreferenceReadWriteLock, ReentrantWriterPreferenceReadWriteLock

    public class WriterPreferenceReadWriteLock

extends java.lang.Object
implements ReadWriteLock

A ReadWriteLock that prefers waiting writers over waiting readers when there is contention. This class is adapted from the versions described in CPJ, improving on the ones there a bit by segregating reader and writer wait queues, which is typically more efficient.

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.

[ Introduction to this package. ]

Nested Class Summary
`protected class` `WriterPreferenceReadWriteLock.ReaderLock`
`protected 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 java.lang.Thread` `activeWriter_`
`protected WriterPreferenceReadWriteLock.ReaderLock` `readerLock_`
`protected long` `waitingReaders_`
`protected long` `waitingWriters_`
`protected WriterPreferenceReadWriteLock.WriterLock` `writerLock_`

Constructor Summary
`WriterPreferenceReadWriteLock()`

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()` get the readLock
`protected boolean` `startRead()`
`protected boolean` `startReadFromNewReader()`
`protected boolean` `startReadFromWaitingReader()`
`protected boolean` `startWrite()`
`protected boolean` `startWriteFromNewWriter()`
`protected boolean` `startWriteFromWaitingWriter()`
`Sync` `writeLock()` get the writeLock

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### activeReaders_

    protected long activeReaders_

### activeWriter_

    protected java.lang.Thread activeWriter_

### waitingReaders_

    protected long waitingReaders_

### waitingWriters_

    protected long waitingWriters_

### readerLock_

    protected final WriterPreferenceReadWriteLock.ReaderLock readerLock_

### writerLock_

    protected final WriterPreferenceReadWriteLock.WriterLock writerLock_

Constructor Detail

### WriterPreferenceReadWriteLock

    public WriterPreferenceReadWriteLock()

Method Detail

### writeLock

    public Sync writeLock()

  Description copied from interface: `ReadWriteLock`
  get the writeLock

  Specified by:
    `writeLock` in interface `ReadWriteLock`

### readLock

    public Sync readLock()

  Description copied from interface: `ReadWriteLock`
  get the readLock

  Specified by:
    `readLock` in interface `ReadWriteLock`

### cancelledWaitingReader

    protected void cancelledWaitingReader()

### cancelledWaitingWriter

    protected void cancelledWaitingWriter()

### allowReader

    protected boolean allowReader()

  Override this method to change to reader preference

### startRead

    protected boolean startRead()

### startWrite

    protected boolean startWrite()

### startReadFromNewReader

    protected boolean startReadFromNewReader()

### startWriteFromNewWriter

    protected boolean startWriteFromNewWriter()

### startReadFromWaitingReader

    protected boolean startReadFromWaitingReader()

### startWriteFromWaitingWriter

    protected boolean startWriteFromWaitingWriter()

### endRead

    protected WriterPreferenceReadWriteLock.Signaller endRead()

  Called upon termination of a read. Returns the object to signal to wake up a waiter, or null if no such

### endWrite

    protected WriterPreferenceReadWriteLock.Signaller endWrite()

  Called upon termination of a write. Returns the object to signal to wake up a waiter, or null if no such