Java Doc for ReentrantReadWriteLock.java in  » Apache-Harmony-Java-SE » java-package » java » util » concurrent » locks » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Apache Harmony Java SE » java package » java.util.concurrent.locks 
Source Cross Reference  Class Diagram Java Document (Java Doc) 


java.lang.Object
   java.util.concurrent.locks.ReentrantReadWriteLock

ReentrantReadWriteLock
public class ReentrantReadWriteLock implements ReadWriteLock,java.io.Serializable(Code)
An implementation of ReadWriteLock supporting similar semantics to ReentrantLock .

This class has the following properties:

  • Acquisition order

    This class does not impose a reader or writer preference ordering for lock access. However, it does support an optional fairness policy. When constructed as fair, threads contend for entry using an approximately arrival-order policy. When the write lock is released either the longest-waiting single writer will be assigned the write lock, or if there is a reader waiting longer than any writer, the set of readers will be assigned the read lock. When constructed as non-fair, the order of entry to the lock need not be in arrival order. In either case, if readers are active and a writer enters the lock then no subsequent readers will be granted the read lock until after that writer has acquired and released the write lock.

  • Reentrancy

    This lock allows both readers and 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.

    Additionally, a writer can acquire the read lock - but not vice-versa. Among other applications, reentrancy can be useful when write locks are held during calls or callbacks to methods that perform reads under read locks. If a reader tries to acquire the write lock it will never succeed.

  • Lock downgrading

    Reentrancy also allows downgrading from the write lock to a read lock, by acquiring the write lock, then the read lock and then releasing the write lock. However, upgrading from a read lock to the write lock, is not possible.

  • Interruption of lock acquisition

    The read lock and write lock both support interruption during lock acquisition.

  • Condition support

    The write lock provides a Condition implementation that behaves in the same way, with respect to the write lock, as the Condition implementation provided by ReentrantLock.newCondition does for ReentrantLock . This Condition can, of course, only be used with the write lock.

    The read lock does not support a Condition and readLock().newCondition() throws UnsupportedOperationException.

  • Instrumentation

    This class supports methods to determine whether locks are held or contended. These methods are designed for monitoring system state, not for synchronization control.

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 throws from locking methods.
since:
   1.5
author:
   Doug Lea


Inner Class :abstract static class Sync extends AbstractQueuedSynchronizer
Inner Class :final static class NonfairSync extends Sync
Inner Class :final static class FairSync extends Sync
Inner Class :public static class ReadLock implements Lock,java.io.Serializable
Inner Class :public static class WriteLock implements Lock,java.io.Serializable

Field Summary
final static  intEXCLUSIVE_MASK
    
final static  intSHARED_SHIFT
    
final static  intSHARED_UNIT
    

Constructor Summary
public  ReentrantReadWriteLock()
     Creates a new ReentrantReadWriteLock with default ordering properties.
public  ReentrantReadWriteLock(boolean fair)
     Creates a new ReentrantReadWriteLock with the given fairness policy.

Method Summary
static  intexclusiveCount(int c)
    
protected  ThreadgetOwner()
     Returns the thread that currently owns the exclusive lock, or null if not owned.
final public  intgetQueueLength()
     Returns an estimate of the number of threads waiting to acquire.
protected  Collection<Thread>getQueuedReaderThreads()
     Returns a collection containing threads that may be waiting to acquire the read lock.
protected  Collection<Thread>getQueuedThreads()
     Returns a collection containing threads that may be waiting to acquire.
protected  Collection<Thread>getQueuedWriterThreads()
     Returns a collection containing threads that may be waiting to acquire the write lock.
public  intgetReadLockCount()
     Queries the number of read locks held for this lock.
public  intgetWaitQueueLength(Condition condition)
     Returns an estimate of the number of threads waiting on the given condition associated with the write lock.
protected  Collection<Thread>getWaitingThreads(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.
public  intgetWriteHoldCount()
     Queries the number of reentrant write holds on this lock by the current thread.
final public  booleanhasQueuedThread(Thread thread)
     Queries whether the given thread is waiting to acquire this lock.
final public  booleanhasQueuedThreads()
     Queries whether any threads are waiting to acquire.
public  booleanhasWaiters(Condition condition)
     Queries whether any threads are waiting on the given condition associated with the write lock.
final public  booleanisFair()
     Returns true if this lock has fairness set true.
public  booleanisWriteLocked()
     Queries if the write lock is held by any thread.
public  booleanisWriteLockedByCurrentThread()
     Queries if the write lock is held by the current thread.
public  ReentrantReadWriteLock.ReadLockreadLock()
    
static  intsharedCount(int c)
    
public  StringtoString()
     Returns a string identifying this lock, as well as its lock state.
public  ReentrantReadWriteLock.WriteLockwriteLock()
    

Field Detail
EXCLUSIVE_MASK
final static int EXCLUSIVE_MASK(Code)



SHARED_SHIFT
final static int SHARED_SHIFT(Code)



SHARED_UNIT
final static int SHARED_UNIT(Code)




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



ReentrantReadWriteLock
public ReentrantReadWriteLock(boolean fair)(Code)
Creates a new ReentrantReadWriteLock with the given fairness policy.
Parameters:
  fair - true if this lock should use a fair ordering policy




Method Detail
exclusiveCount
static int exclusiveCount(int c)(Code)
Returns the number of exclusive holds represented in count



getOwner
protected Thread getOwner()(Code)
Returns the thread that currently owns the exclusive 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. the owner, or null if not owned.



getQueueLength
final public int getQueueLength()(Code)
Returns an estimate of the number of threads waiting to acquire. 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. the estimated number of threads waiting for this lock



getQueuedReaderThreads
protected Collection<Thread> getQueuedReaderThreads()(Code)
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. the collection of threads



getQueuedThreads
protected Collection<Thread> getQueuedThreads()(Code)
Returns a collection containing threads that may be waiting to acquire. 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. the collection of threads



getQueuedWriterThreads
protected Collection<Thread> getQueuedWriterThreads()(Code)
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. the collection of threads



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



getWaitQueueLength
public int getWaitQueueLength(Condition condition)(Code)
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 the estimated number of waiting threads.
throws:
  IllegalMonitorStateException - if this lock is not held
throws:
  IllegalArgumentException - if the given condition isnot associated with this lock
throws:
  NullPointerException - if condition null



getWaitingThreads
protected Collection<Thread> getWaitingThreads(Condition condition)(Code)
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 the collection of threads
throws:
  IllegalMonitorStateException - if this lock is not held
throws:
  IllegalArgumentException - if the given condition isnot associated with this lock
throws:
  NullPointerException - if condition null



getWriteHoldCount
public int getWriteHoldCount()(Code)
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. the number of holds on this lock by the current thread,or zero if this lock is not held by the current thread.



hasQueuedThread
final public boolean hasQueuedThread(Thread thread)(Code)
Queries whether the given thread is waiting to acquire this lock. Note that because cancellations may occur at any time, a true return does not guarantee that this thread will ever acquire. This method is designed primarily for use in monitoring of the system state.
Parameters:
  thread - the thread true if the given thread is queued waiting for this lock.
throws:
  NullPointerException - if thread is null



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



hasWaiters
public boolean hasWaiters(Condition condition)(Code)
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 true if there are any waiting threads.
throws:
  IllegalMonitorStateException - if this lock is not held
throws:
  IllegalArgumentException - if the given condition isnot associated with this lock
throws:
  NullPointerException - if condition null



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



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



isWriteLockedByCurrentThread
public boolean isWriteLockedByCurrentThread()(Code)
Queries if the write lock is held by the current thread. true if current thread holds this lock and false otherwise.



readLock
public ReentrantReadWriteLock.ReadLock readLock()(Code)



sharedCount
static int sharedCount(int c)(Code)
Returns the number of shared holds represented in count



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



writeLock
public ReentrantReadWriteLock.WriteLock writeLock()(Code)



Methods inherited from java.lang.Object
protected Object clone() throws CloneNotSupportedException(Code)(Java Doc)
public boolean equals(Object object)(Code)(Java Doc)
protected void finalize() throws Throwable(Code)(Java Doc)
final public Class<? extends Object> getClass()(Code)(Java Doc)
public int hashCode()(Code)(Java Doc)
final public void notify()(Code)(Java Doc)
final public void notifyAll()(Code)(Java Doc)
public String toString()(Code)(Java Doc)
final public void wait(long millis, int nanos) throws InterruptedException(Code)(Java Doc)
final public void wait(long millis) throws InterruptedException(Code)(Java Doc)
final public void wait() throws InterruptedException(Code)(Java Doc)

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.