Package org.apache.commons.configuration2.sync

# Class ReadWriteSynchronizer

java.lang.Object
org.apache.commons.configuration2.sync.ReadWriteSynchronizer

All Implemented Interfaces:
  `Synchronizer`

public class ReadWriteSynchronizer extends Object implements Synchronizer

A special implementation of `Synchronizer` based on the JDK's `ReentrantReadWriteLock` class.

This class manages a `ReadWriteLock` object internally. The methods of the `Synchronizer` interface are delegated to this lock. So this class behaves in the same way as documented for `ReentrantReadWriteLock`.

Using this `Synchronizer` implementation is appropriate to make configuration objects thread-safe. This means that multiple threads can read configuration data in parallel; if one thread wants to update the configuration, this happens with an exclusive lock.

Since:
  2.0

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ReadWriteSynchronizer()`
  Creates a new instance of `ReadWriteSynchronizer` and initializes it with a lock object of type `ReentrantReadWriteLock`.
  `ReadWriteSynchronizer(ReadWriteLock l)`
  Creates a new instance of `ReadWriteSynchronizer` and initializes it with the given lock object.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `beginRead()`
  Notifies this `Synchronizer` that the current thread is going to start a read operation on the managed configuration.
  `void`
  `beginWrite()`
  Notifies this `Synchronizer` that the current thread is going to start a write operation on the managed configuration.
  `void`
  `endRead()`
  Notifies this `Synchronizer` that the current thread has finished its read operation.
  `void`
  `endWrite()`
  Notifies this `Synchronizer` that the current thread has finished its write operation.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### ReadWriteSynchronizer

    public ReadWriteSynchronizer(ReadWriteLock l)
    Creates a new instance of `ReadWriteSynchronizer` and initializes it with the given lock object. This constructor can be used to pass a lock object which has been configured externally. If the lock object is null, a default lock object is created.
    Parameters:
      `l` - the lock object to be used (can be null)

  - ### ReadWriteSynchronizer

    public ReadWriteSynchronizer()
    Creates a new instance of `ReadWriteSynchronizer` and initializes it with a lock object of type `ReentrantReadWriteLock`.

- ## Method Details

  - ### beginRead

    public void beginRead()
    Description copied from interface: `Synchronizer`
    Notifies this `Synchronizer` that the current thread is going to start a read operation on the managed configuration. This call can block if a concrete implementation decides that the thread has to wait until a specific condition is fulfilled.
    Specified by:
      `beginRead` in interface `Synchronizer`

  - ### endRead

    public void endRead()
    Description copied from interface: `Synchronizer`
    Notifies this `Synchronizer` that the current thread has finished its read operation. This may cause other waiting threads to be granted access to the managed configuration.
    Specified by:
      `endRead` in interface `Synchronizer`

  - ### beginWrite

    public void beginWrite()
    Description copied from interface: `Synchronizer`
    Notifies this `Synchronizer` that the current thread is going to start a write operation on the managed configuration. This call may block. For instance, a concrete implementation may suspend the thread until all read operations currently active are finished,
    Specified by:
      `beginWrite` in interface `Synchronizer`

  - ### endWrite

    public void endWrite()
    Description copied from interface: `Synchronizer`
    Notifies this `Synchronizer` that the current thread has finished its write operation. This may cause other waiting threads to be granted access to the managed configuration.
    Specified by:
      `endWrite` in interface `Synchronizer`