Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

org.ematgine.utils.concurrent
Class ReentrantWriterPreferenceReadWriteLock  view ReentrantWriterPreferenceReadWriteLock download ReentrantWriterPreferenceReadWriteLock.java

java.lang.Object
  extended byorg.ematgine.utils.concurrent.WriterPreferenceReadWriteLock
      extended byorg.ematgine.utils.concurrent.ReentrantWriterPreferenceReadWriteLock
All Implemented Interfaces:
ReadWriteLock

public class ReentrantWriterPreferenceReadWriteLock
extends WriterPreferenceReadWriteLock

A writer-preference ReadWriteLock that allows writers to reacquire read or write locks in the style of a ReentrantLock. Readers are not allowed until all write locks held by the writing thread have been released. Readers may also reacquire read locks, but not write locks. Among other applications, reentrancy can be useful when write locks are held during calls or callbacks to methods that perform reads under read locks.

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();
   }
 }
 

[ Introduction to this package. ]


Nested Class Summary
 
Nested classes inherited from class org.ematgine.utils.concurrent.WriterPreferenceReadWriteLock
WriterPreferenceReadWriteLock.ReaderLock, WriterPreferenceReadWriteLock.Signaller, WriterPreferenceReadWriteLock.WriterLock
 
Field Summary
protected  long writeHolds_
          Number of number of acquires on write lock by activeWriter_ thread
 
Fields inherited from class org.ematgine.utils.concurrent.WriterPreferenceReadWriteLock
activeReaders_, activeWriter_, readerLock_, waitingReaders_, waitingWriters_, writerLock_
 
Constructor Summary
ReentrantWriterPreferenceReadWriteLock()
           
 
Method Summary
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 startWrite()
           
 
Methods inherited from class org.ematgine.utils.concurrent.WriterPreferenceReadWriteLock
cancelledWaitingReader, cancelledWaitingWriter, readLock, startRead, startReadFromNewReader, startReadFromWaitingReader, startWriteFromNewWriter, startWriteFromWaitingWriter, writeLock
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

writeHolds_

protected long writeHolds_
Number of number of acquires on write lock by activeWriter_ thread

Constructor Detail

ReentrantWriterPreferenceReadWriteLock

public ReentrantWriterPreferenceReadWriteLock()
Method Detail

allowReader

protected boolean allowReader()
Description copied from class: WriterPreferenceReadWriteLock
Override this method to change to reader preference

Overrides:
allowReader in class WriterPreferenceReadWriteLock

startWrite

protected boolean startWrite()
Overrides:
startWrite in class WriterPreferenceReadWriteLock

endRead

protected WriterPreferenceReadWriteLock.Signaller endRead()
Description copied from class: WriterPreferenceReadWriteLock
Called upon termination of a read. Returns the object to signal to wake up a waiter, or null if no such

Overrides:
endRead in class WriterPreferenceReadWriteLock

endWrite

protected WriterPreferenceReadWriteLock.Signaller endWrite()
Description copied from class: WriterPreferenceReadWriteLock
Called upon termination of a write. Returns the object to signal to wake up a waiter, or null if no such

Overrides:
endWrite in class WriterPreferenceReadWriteLock