Interface ReadWriteLock

All Known Implementing Classes:
FIFOReadWriteLock, ReaderPreferenceReadWriteLock, ReentrantWriterPreferenceReadWriteLock, WriterPreferenceReadWriteLock

public interface ReadWriteLock
ReadWriteLocks maintain a pair of associated locks. The readLock may be held simultanously by multiple reader threads, so long as there are no writers. The writeLock is exclusive. ReadWrite locks are generally preferable to plain Sync locks or synchronized methods in cases where:
  • The methods in a class can be cleanly separated into those that only access (read) data vs those that modify (write).
  • Target applications generally have more readers than writers.
  • The methods are relatively time-consuming (as a rough rule of thumb, exceed more than a hundred instructions), so it pays to introduce a bit more overhead associated with ReadWrite locks compared to simple synchronized methods etc in order to allow concurrency among reader threads.
Different implementation classes differ in policies surrounding which threads to prefer when there is contention. By far, the most commonly useful policy is WriterPreferenceReadWriteLock. The other implementations are targeted for less common, niche applications.

Standard usage:

 class X {
   ReadWriteLock rw;
   // ...

   public void read() throws InterruptedException { 
     rw.readLock().acquire();
     try {
       // ... do the read
     }
     finally {
       rw.readlock().release()
     }
   }


   public void write() throws InterruptedException { 
     rw.writeLock().acquire();
     try {
       // ... do the write
     }
     finally {
       rw.writelock().release()
     }
   }
 }
 
See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    get the readLock
    get the writeLock
  • Method Details

    • readLock

      Sync readLock()
      get the readLock
    • writeLock

      Sync writeLock()
      get the writeLock