java.util.concurrent.locks
Class ReentrantReadWriteLock

java.lang.Object sample code for java.lang.Object definition code for java.lang.Object 
  extended by java.util.concurrent.locks.ReentrantReadWriteLock
All Implemented Interfaces:
Serializable sample code for java.io.Serializable definition code for java.io.Serializable , ReadWriteLock sample code for java.util.concurrent.locks.ReadWriteLock definition code for java.util.concurrent.locks.ReadWriteLock

public class ReentrantReadWriteLock
extends Object sample code for java.lang.Object definition code for java.lang.Object
implements ReadWriteLock sample code for java.util.concurrent.locks.ReadWriteLock definition code for java.util.concurrent.locks.ReadWriteLock , Serializable sample code for java.io.Serializable definition code for java.io.Serializable

An implementation of ReadWriteLock sample code for java.util.concurrent.locks.ReadWriteLock definition code for java.util.concurrent.locks.ReadWriteLock supporting similar semantics to ReentrantLock sample code for java.util.concurrent.locks.ReentrantLock definition code for java.util.concurrent.locks.ReentrantLock .

This class has the following properties:

Serialization of this class behaves in the same way as built-in locks: a deserialized lock is in the unlocked state, regardless of its state when serialized.

Sample usages. Here is a code sketch showing how to exploit reentrancy to perform lock downgrading after updating a cache (exception handling is elided for simplicity):

 class CachedData {
   Object data;
   volatile boolean cacheValid;
   ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

   void processCachedData() {
     rwl.readLock().lock();
     if (!cacheValid) {
        // upgrade lock manually
        rwl.readLock().unlock();   // must unlock first to obtain writelock
        rwl.writeLock().lock();
        if (!cacheValid) { // recheck
          data = ...
          cacheValid = true;
        }
        // downgrade lock
        rwl.readLock().lock();  // reacquire read without giving up write lock
        rwl.writeLock().unlock(); // unlock write, still hold read
     }

     use(data);
     rwl.readLock().unlock();
   }
 }
 
ReentrantReadWriteLocks can be used to improve concurrency in some uses of some kinds of Collections. This is typically worthwhile only when the collections are expected to be large, accessed by more reader threads than writer threads, and entail operations with overhead that outweighs synchronization overhead. For example, here is a class using a TreeMap that is expected to be large and concurrently accessed.
 class RWDictionary {
    private final Map<String, Data>  m = new TreeMap<String, Data>();
    private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
    private final Lock r = rwl.readLock();
    private final Lock w = rwl.writeLock();

    public Data get(String key) {
        r.lock(); try { return m.get(key); } finally { r.unlock(); }
    }
    public String[] allKeys() {
        r.lock(); try { return m.keySet().toArray(); } finally { r.unlock(); }
    }
    public Data put(String key, Data value) {
        w.lock(); try { return m.put(key, value); } finally { w.unlock(); }
    }
    public void clear() {
        w.lock(); try { m.clear(); } finally { w.unlock(); }
    }
 }
 

Implementation Notes

A reentrant write lock intrinsically defines an owner and can only be released by the thread that acquired it. In contrast, in this implementation, the read lock has no concept of ownership, and there is no requirement that the thread releasing a read lock is the same as the one that acquired it. However, this property is not guaranteed to hold in future implementations of this class.

This lock supports a maximum of 65536 recursive write locks and 65536 read locks. Attempts to exceed these limits result in Error sample code for java.lang.Error definition code for java.lang.Error throws from locking methods.

Since:
1.5
See Also:
Serialized Form

Nested Class Summary
static class ReentrantReadWriteLock.ReadLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock definition code for java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
          The lock returned by method readLock() sample code for java.util.concurrent.locks.ReentrantReadWriteLock.readLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.readLock() .
static class ReentrantReadWriteLock.WriteLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock definition code for java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock
          The lock returned by method writeLock() sample code for java.util.concurrent.locks.ReentrantReadWriteLock.writeLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.writeLock() .
 
Constructor Summary
ReentrantReadWriteLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.ReentrantReadWriteLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.ReentrantReadWriteLock() ()
          Creates a new ReentrantReadWriteLock with default ordering properties.
ReentrantReadWriteLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.ReentrantReadWriteLock(boolean) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.ReentrantReadWriteLock(boolean) (boolean fair)
          Creates a new ReentrantReadWriteLock with the given fairness policy.
 
Method Summary
protected  Thread sample code for java.lang.Thread definition code for java.lang.Thread getOwner sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getOwner() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getOwner() ()
          Returns the thread that currently owns the write lock, or null if not owned.
protected  Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getQueuedReaderThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedReaderThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedReaderThreads() ()
          Returns a collection containing threads that may be waiting to acquire the read lock.
protected  Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getQueuedThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedThreads() ()
          Returns a collection containing threads that may be waiting to acquire either the read or write lock.
protected  Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getQueuedWriterThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedWriterThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedWriterThreads() ()
          Returns a collection containing threads that may be waiting to acquire the write lock.
 int getQueueLength sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueueLength() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueueLength() ()
          Returns an estimate of the number of threads waiting to acquire either the read or write lock.
 int getReadLockCount sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getReadLockCount() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getReadLockCount() ()
          Queries the number of read locks held for this lock.
protected  Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getWaitingThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitingThreads(java.util.concurrent.locks.Condition) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitingThreads(java.util.concurrent.locks.Condition) (Condition sample code for java.util.concurrent.locks.Condition definition code for java.util.concurrent.locks.Condition  condition)
          Returns a collection containing those threads that may be waiting on the given condition associated with the write lock.
 int getWaitQueueLength sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitQueueLength(java.util.concurrent.locks.Condition) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitQueueLength(java.util.concurrent.locks.Condition) (Condition sample code for java.util.concurrent.locks.Condition definition code for java.util.concurrent.locks.Condition  condition)
          Returns an estimate of the number of threads waiting on the given condition associated with the write lock.
 int getWriteHoldCount sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getWriteHoldCount() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getWriteHoldCount() ()
          Queries the number of reentrant write holds on this lock by the current thread.
 boolean hasQueuedThread sample code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThread(java.lang.Thread) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThread(java.lang.Thread) (Thread sample code for java.lang.Thread definition code for java.lang.Thread  thread)
          Queries whether the given thread is waiting to acquire either the read or write lock.
 boolean hasQueuedThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThreads() ()
          Queries whether any threads are waiting to acquire the read or write lock.
 boolean hasWaiters sample code for java.util.concurrent.locks.ReentrantReadWriteLock.hasWaiters(java.util.concurrent.locks.Condition) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.hasWaiters(java.util.concurrent.locks.Condition) (Condition sample code for java.util.concurrent.locks.Condition definition code for java.util.concurrent.locks.Condition  condition)
          Queries whether any threads are waiting on the given condition associated with the write lock.
 boolean isFair sample code for java.util.concurrent.locks.ReentrantReadWriteLock.isFair() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.isFair() ()
          Returns true if this lock has fairness set true.
 boolean isWriteLocked sample code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLocked() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLocked() ()
          Queries if the write lock is held by any thread.
 boolean isWriteLockedByCurrentThread sample code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLockedByCurrentThread() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLockedByCurrentThread() ()
          Queries if the write lock is held by the current thread.
 ReentrantReadWriteLock.ReadLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock definition code for java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock readLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.readLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.readLock() ()
          Returns the lock used for reading.
 String sample code for java.lang.String definition code for java.lang.String toString sample code for java.util.concurrent.locks.ReentrantReadWriteLock.toString() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.toString() ()
          Returns a string identifying this lock, as well as its lock state.
 ReentrantReadWriteLock.WriteLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock definition code for java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock writeLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.writeLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.writeLock() ()
          Returns the lock used for writing.
 
Methods inherited from class java.lang.Object sample code for java.lang.Object definition code for java.lang.Object
clone sample code for java.lang.Object.clone() definition code for java.lang.Object.clone() , equals sample code for java.lang.Object.equals(java.lang.Object) definition code for java.lang.Object.equals(java.lang.Object) , finalize sample code for java.lang.Object.finalize() definition code for java.lang.Object.finalize() , getClass sample code for java.lang.Object.getClass() definition code for java.lang.Object.getClass() , hashCode sample code for java.lang.Object.hashCode() definition code for java.lang.Object.hashCode() , notify sample code for java.lang.Object.notify() definition code for java.lang.Object.notify() , notifyAll sample code for java.lang.Object.notifyAll() definition code for java.lang.Object.notifyAll() , wait sample code for java.lang.Object.wait() definition code for java.lang.Object.wait() , wait sample code for java.lang.Object.wait(long) definition code for java.lang.Object.wait(long) , wait sample code for java.lang.Object.wait(long, int) definition code for java.lang.Object.wait(long, int)
 

Constructor Detail

ReentrantReadWriteLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock()

public ReentrantReadWriteLock()
Creates a new ReentrantReadWriteLock with default ordering properties.


ReentrantReadWriteLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock(boolean) definition code for java.util.concurrent.locks.ReentrantReadWriteLock(boolean)

public ReentrantReadWriteLock(boolean fair)
Creates a new ReentrantReadWriteLock with the given fairness policy.

Parameters:
fair - true if this lock should use a fair ordering policy
Method Detail

writeLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.writeLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.writeLock()

public ReentrantReadWriteLock.WriteLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock definition code for java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock  writeLock()
Description copied from interface: ReadWriteLock sample code for java.util.concurrent.locks.ReadWriteLock.writeLock() definition code for java.util.concurrent.locks.ReadWriteLock.writeLock()
Returns the lock used for writing.

Specified by:
writeLock sample code for java.util.concurrent.locks.ReadWriteLock.writeLock() definition code for java.util.concurrent.locks.ReadWriteLock.writeLock() in interface ReadWriteLock sample code for java.util.concurrent.locks.ReadWriteLock definition code for java.util.concurrent.locks.ReadWriteLock
Returns:
the lock used for writing.

readLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.readLock() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.readLock()

public ReentrantReadWriteLock.ReadLock sample code for java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock definition code for java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock  readLock()
Description copied from interface: ReadWriteLock sample code for java.util.concurrent.locks.ReadWriteLock.readLock() definition code for java.util.concurrent.locks.ReadWriteLock.readLock()
Returns the lock used for reading.

Specified by:
readLock sample code for java.util.concurrent.locks.ReadWriteLock.readLock() definition code for java.util.concurrent.locks.ReadWriteLock.readLock() in interface ReadWriteLock sample code for java.util.concurrent.locks.ReadWriteLock definition code for java.util.concurrent.locks.ReadWriteLock
Returns:
the lock used for reading.

isFair sample code for java.util.concurrent.locks.ReentrantReadWriteLock.isFair() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.isFair()

public final boolean isFair()
Returns true if this lock has fairness set true.

Returns:
true if this lock has fairness set true.

getOwner sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getOwner() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getOwner()

protected Thread sample code for java.lang.Thread definition code for java.lang.Thread  getOwner()
Returns the thread that currently owns the write lock, or null if not owned. Note that the owner may be momentarily null even if there are threads trying to acquire the lock but have not yet done so. This method is designed to facilitate construction of subclasses that provide more extensive lock monitoring facilities.

Returns:
the owner, or null if not owned.

getReadLockCount sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getReadLockCount() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getReadLockCount()

public int getReadLockCount()
Queries the number of read locks held for this lock. This method is designed for use in monitoring system state, not for synchronization control.

Returns:
the number of read locks held.

isWriteLocked sample code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLocked() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLocked()

public boolean isWriteLocked()
Queries if the write lock is held by any thread. This method is designed for use in monitoring system state, not for synchronization control.

Returns:
true if any thread holds the write lock and false otherwise.

isWriteLockedByCurrentThread sample code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLockedByCurrentThread() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.isWriteLockedByCurrentThread()

public boolean isWriteLockedByCurrentThread()
Queries if the write lock is held by the current thread.

Returns:
true if the current thread holds the write lock and false otherwise.

getWriteHoldCount sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getWriteHoldCount() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getWriteHoldCount()

public int getWriteHoldCount()
Queries the number of reentrant write holds on this lock by the current thread. A writer thread has a hold on a lock for each lock action that is not matched by an unlock action.

Returns:
the number of holds on the write lock by the current thread, or zero if the write lock is not held by the current thread.

getQueuedWriterThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedWriterThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedWriterThreads()

protected Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getQueuedWriterThreads()
Returns a collection containing threads that may be waiting to acquire the write lock. Because the actual set of threads may change dynamically while constructing this result, the returned collection is only a best-effort estimate. The elements of the returned collection are in no particular order. This method is designed to facilitate construction of subclasses that provide more extensive lock monitoring facilities.

Returns:
the collection of threads

getQueuedReaderThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedReaderThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedReaderThreads()

protected Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getQueuedReaderThreads()
Returns a collection containing threads that may be waiting to acquire the read lock. Because the actual set of threads may change dynamically while constructing this result, the returned collection is only a best-effort estimate. The elements of the returned collection are in no particular order. This method is designed to facilitate construction of subclasses that provide more extensive lock monitoring facilities.

Returns:
the collection of threads

hasQueuedThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThreads()

public final boolean hasQueuedThreads()
Queries whether any threads are waiting to acquire the read or write lock. Note that because cancellations may occur at any time, a true return does not guarantee that any other thread will ever acquire a lock. This method is designed primarily for use in monitoring of the system state.

Returns:
true if there may be other threads waiting to acquire the lock.

hasQueuedThread sample code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThread(java.lang.Thread) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.hasQueuedThread(java.lang.Thread)

public final boolean hasQueuedThread(Thread sample code for java.lang.Thread definition code for java.lang.Thread  thread)
Queries whether the given thread is waiting to acquire either the read or write lock. Note that because cancellations may occur at any time, a true return does not guarantee that this thread will ever acquire a lock. This method is designed primarily for use in monitoring of the system state.

Parameters:
thread - the thread
Returns:
true if the given thread is queued waiting for this lock.
Throws:
NullPointerException sample code for java.lang.NullPointerException definition code for java.lang.NullPointerException - if thread is null

getQueueLength sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueueLength() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueueLength()

public final int getQueueLength()
Returns an estimate of the number of threads waiting to acquire either the read or write lock. The value is only an estimate because the number of threads may change dynamically while this method traverses internal data structures. This method is designed for use in monitoring of the system state, not for synchronization control.

Returns:
the estimated number of threads waiting for this lock

getQueuedThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedThreads() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getQueuedThreads()

protected Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getQueuedThreads()
Returns a collection containing threads that may be waiting to acquire either the read or write lock. Because the actual set of threads may change dynamically while constructing this result, the returned collection is only a best-effort estimate. The elements of the returned collection are in no particular order. This method is designed to facilitate construction of subclasses that provide more extensive monitoring facilities.

Returns:
the collection of threads

hasWaiters sample code for java.util.concurrent.locks.ReentrantReadWriteLock.hasWaiters(java.util.concurrent.locks.Condition) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.hasWaiters(java.util.concurrent.locks.Condition)

public boolean hasWaiters(Condition sample code for java.util.concurrent.locks.Condition definition code for java.util.concurrent.locks.Condition  condition)
Queries whether any threads are waiting on the given condition associated with the write lock. Note that because timeouts and interrupts may occur at any time, a true return does not guarantee that a future signal will awaken any threads. This method is designed primarily for use in monitoring of the system state.

Parameters:
condition - the condition
Returns:
true if there are any waiting threads.
Throws:
IllegalMonitorStateException sample code for java.lang.IllegalMonitorStateException definition code for java.lang.IllegalMonitorStateException - if this lock is not held
IllegalArgumentException sample code for java.lang.IllegalArgumentException definition code for java.lang.IllegalArgumentException - if the given condition is not associated with this lock
NullPointerException sample code for java.lang.NullPointerException definition code for java.lang.NullPointerException - if condition null

getWaitQueueLength sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitQueueLength(java.util.concurrent.locks.Condition) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitQueueLength(java.util.concurrent.locks.Condition)

public int getWaitQueueLength(Condition sample code for java.util.concurrent.locks.Condition definition code for java.util.concurrent.locks.Condition  condition)
Returns an estimate of the number of threads waiting on the given condition associated with the write lock. Note that because timeouts and interrupts may occur at any time, the estimate serves only as an upper bound on the actual number of waiters. This method is designed for use in monitoring of the system state, not for synchronization control.

Parameters:
condition - the condition
Returns:
the estimated number of waiting threads.
Throws:
IllegalMonitorStateException sample code for java.lang.IllegalMonitorStateException definition code for java.lang.IllegalMonitorStateException - if this lock is not held
IllegalArgumentException sample code for java.lang.IllegalArgumentException definition code for java.lang.IllegalArgumentException - if the given condition is not associated with this lock
NullPointerException sample code for java.lang.NullPointerException definition code for java.lang.NullPointerException - if condition null

getWaitingThreads sample code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitingThreads(java.util.concurrent.locks.Condition) definition code for java.util.concurrent.locks.ReentrantReadWriteLock.getWaitingThreads(java.util.concurrent.locks.Condition)

protected Collection sample code for java.util.Collection definition code for java.util.Collection <Thread sample code for java.lang.Thread definition code for java.lang.Thread > getWaitingThreads(Condition sample code for java.util.concurrent.locks.Condition definition code for java.util.concurrent.locks.Condition  condition)
Returns a collection containing those threads that may be waiting on the given condition associated with the write lock. Because the actual set of threads may change dynamically while constructing this result, the returned collection is only a best-effort estimate. The elements of the returned collection are in no particular order. This method is designed to facilitate construction of subclasses that provide more extensive condition monitoring facilities.

Parameters:
condition - the condition
Returns:
the collection of threads
Throws:
IllegalMonitorStateException sample code for java.lang.IllegalMonitorStateException definition code for java.lang.IllegalMonitorStateException - if this lock is not held
IllegalArgumentException sample code for java.lang.IllegalArgumentException definition code for java.lang.IllegalArgumentException - if the given condition is not associated with this lock
NullPointerException sample code for java.lang.NullPointerException definition code for java.lang.NullPointerException - if condition null

toString sample code for java.util.concurrent.locks.ReentrantReadWriteLock.toString() definition code for java.util.concurrent.locks.ReentrantReadWriteLock.toString()

public String sample code for java.lang.String definition code for java.lang.String  toString()
Returns a string identifying this lock, as well as its lock state. The state, in brackets, includes the String "Write locks =" followed by the number of reentrantly held write locks, and the String "Read locks =" followed by the number of held read locks.

Overrides:
toString sample code for java.lang.Object.toString() definition code for java.lang.Object.toString() in class Object sample code for java.lang.Object definition code for java.lang.Object
Returns:
a string identifying this lock, as well as its lock state.