org.alfresco.util
Class ReadWriteLockExecuter

java.lang.Object
  extended by org.alfresco.util.ReadWriteLockExecuter

public abstract class ReadWriteLockExecuter
extends java.lang.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

Constructor Summary
ReadWriteLockExecuter()
          Default constructor
 
Method Summary
 java.lang.Object execute()
           
protected abstract  java.lang.Object getWithReadLock()
          Execute the read-only part of the work.
protected abstract  java.lang.Object getWithWriteLock()
          Execute the write part of the work.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ReadWriteLockExecuter

public ReadWriteLockExecuter()
Default constructor

Method Detail

getWithReadLock

protected abstract java.lang.Object getWithReadLock()
                                             throws java.lang.Throwable
Execute the read-only part of the work.

Returns:
Returns a value of interest or null if the ReadWriteLockExecuter.getWithWriteLock() method must be called
Throws:
java.lang.Throwable - all checked exceptions are wrapped in a RuntimeException

getWithWriteLock

protected abstract java.lang.Object getWithWriteLock()
                                              throws java.lang.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 ReadWriteLockExecuter.getWithReadLock() and the ReadWriteLockExecuter.getWithWriteLock() during which another thread may have populated the resource of interest.

Returns:
Returns the value of interest of null
Throws:
java.lang.Throwable - all checked exceptions are wrapped in a RuntimeException

execute

public java.lang.Object execute()


Copyright © 2005 - 2010 Alfresco Software, Inc. All Rights Reserved.