Class RWLock


  • public class RWLock
    extends Object
    A RWLock provides concurrency control for multiple readers single writer access patterns. This lock can provide access to multiple reader threads simultaneously as long as there are no writer threads. Once a writer thread gains access to the instance locked by a RWLock, all the reader threads wait till the writer completes accessing the instance in question.

    A RWLock is extremely useful in scenarios where there are lots more readers and very few writers to a data structure. Also if the read operation by the reader thread could take significant amount of time (binary search etc.)

    The usage of Lock can be see as under:


        public class MyBTree {
          private RWLock lock = new Lock();
          .....
          .....
          public Object find(Object o) {
            try {
              lock.acquireReadLock();
              ....perform complex search to get the Object ...
              return result;
            } finally {
              lock.releaseReadLock();
            }
          }
    
          public void insert(Object o) {
            try {
              lock.acquireWriteLock();
              ....perform complex operation to insert object ...
            } finally {
              lock.releaseWriteLock();
            }
          }
        }
     

    Author:
    Dhiru Pandey 8/7/2000
    • Constructor Detail

      • RWLock

        public RWLock()
    • Method Detail

      • acquireReadLock

        public void acquireReadLock()
        This method is used to acquire a read lock. If there is already a writer thread accessing the object using the RWLock then the reader thread will wait until the writer completes its operation
      • acquireWriteLock

        public void acquireWriteLock()
        This method is used to acquire a write lock. If there are already reader threads accessing the object using the RWLock, then the writer thread will wait till all the reader threads are finished with their operations.
      • isWriteLocked

        public boolean isWriteLocked()
        isWriteLocked returns true if the RWLock is in a write locked state.
      • releaseReadLock

        public void releaseReadLock()
        This method is used to release a read lock. It also notifies any waiting writer thread that it could now acquire a write lock.
      • releaseWriteLock

        public void releaseWriteLock()
        This method is used to release a write lock. It also notifies any pending readers that they could now acquire the read lock. If there are no reader threads then it will try to notify any waiting writer thread that it could now acquire a write lock.