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 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. ]

  • Field Details

  • Constructor Details

    • WriterPreferenceReadWriteLock

      public WriterPreferenceReadWriteLock()
  • Method Details

    • 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

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

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