Class ReadWriteLockExecuter<T>

java.lang.Object
org.alfresco.util.ReadWriteLockExecuter<T>

public abstract class ReadWriteLockExecuter<T> extends Object
Utility object that wraps read and write methods within the context of a ReentrantReadWriteLock. The callback's methods are best-suited to fetching values from a cache or protecting members that need lazy initialization.

Client code should construct an instance of this class for each resource (or set of resources) that need to be protected.

Since:
3.4
Author:
Derek Hulley
  • Constructor Details

    • ReadWriteLockExecuter

      public ReadWriteLockExecuter()
      Default constructor
  • Method Details

    • getWithReadLock

      protected abstract T getWithReadLock() throws Throwable
      Execute the read-only part of the work.
      Returns:
      Returns a value of interest or null if the getWithWriteLock() method must be called
      Throws:
      Throwable - all checked exceptions are wrapped in a RuntimeException
    • getWithWriteLock

      protected abstract T getWithWriteLock() throws Throwable
      Execute the write part of the work.

      NOTE: It is important to perform a double-check on the resource before assuming it is not null; there is a window between the getWithReadLock() and the getWithWriteLock() during which another thread may have populated the resource of interest.

      Returns:
      Returns the value of interest of null
      Throws:
      Throwable - all checked exceptions are wrapped in a RuntimeException
    • execute

      public T execute()