O - The type of the objects to be locked (locked object type).L - The type of the objects that lock (lock owning type).public class OptimisticObjectLockManager<O,L> extends ObjectLockManager<O,L>
| Modifier and Type | Class and Description |
|---|---|
protected static class |
OptimisticObjectLockManager.LockRemover<O,L>
When unlocking an object for the last time (count is 0), this will remove
the corresponding locked object from the map containing all locked objects.
|
| Modifier and Type | Field and Description |
|---|---|
protected java.lang.reflect.Constructor<? extends ReentrantLock<L>> |
lockConstr
The constructor for instantiating lock implementations.
|
protected java.util.concurrent.ConcurrentMap<O,ReentrantLock<L>> |
objectLocks
A mapping from the locked object to the corresponding locking object.
|
protected boolean |
serviceLogger
Whether the constructor of the lock implementation accepts the service
logger.
|
lockCountManager, lockType, logger| Constructor and Description |
|---|
OptimisticObjectLockManager(java.lang.Class<? extends LockCountManager<? super L>> lockCountManager,
java.lang.Class<? extends ReentrantLock<L>> lock,
java.lang.String lockType,
java.util.logging.Logger logger)
Creates a new
ObjectLockManager with the designated lock count
manager providing the "equality" for the designated reentrant
locks and of the designated type using optimistic locking. |
| Modifier and Type | Method and Description |
|---|---|
protected void |
getLockForObjectReadWriteDirect(boolean writeLock,
L lockingObject,
O lockedObject,
long timeout)
Cf. documentation of
ObjectLockManager.getLockForObject(boolean, Object, Object, long). |
protected ReentrantLock<L> |
getObjectLock(O lockedObject)
Gets the lock for the designated object.
|
getLockForObject, getLockForObject, hasLock, unlockObjectprotected final java.util.concurrent.ConcurrentMap<O,ReentrantLock<L>> objectLocks
protected final java.lang.reflect.Constructor<? extends ReentrantLock<L>> lockConstr
protected final boolean serviceLogger
public OptimisticObjectLockManager(java.lang.Class<? extends LockCountManager<? super L>> lockCountManager, java.lang.Class<? extends ReentrantLock<L>> lock, java.lang.String lockType, java.util.logging.Logger logger) throws java.lang.reflect.InvocationTargetException
ObjectLockManager with the designated lock count
manager providing the "equality" for the designated reentrant
locks and of the designated type using optimistic locking. lockCountManager - The lock count manager that encapsulates what
locking objects are treated as equal when acquiring a lock. The
provided class needs an accessible (public) constructor without
parameters.lock - The reentrant lock to be used for locking. The provided class
needs an accessible (public) constructor with accepting the
designated lockCountManager (of type
Class<? extends LockCountManager<? super L>>), a
boolean as well as an instance of
LockNotification.lockType - The type of locks managed by the created object. This is
for user information only.logger - The logger for log messages.java.lang.reflect.InvocationTargetException - If there are problems instantiating the
designated lock count manager or the reentrant lock, an
InvocationTargetException will be thrown. This
prevents problems at runtime when actually retrieving a lock
(which requires creating the corresponding objects).protected ReentrantLock<L> getObjectLock(O lockedObject)
ObjectLockManagergetObjectLock in class ObjectLockManager<O,L>lockedObject - The locked object for which to retrieve the
corresponding reentrant lock.null in case the designated object is not locked.protected void getLockForObjectReadWriteDirect(boolean writeLock,
L lockingObject,
O lockedObject,
long timeout)
throws java.lang.InterruptedException,
java.util.concurrent.TimeoutException
ObjectLockManagerObjectLockManager.getLockForObject(boolean, Object, Object, long). Implementors can
rely on the first boolean to be set appropriately depending on present
locks.getLockForObjectReadWriteDirect in class ObjectLockManager<O,L>writeLock - Whether to acquire a write lock. This will already be
adapted to a write lock if required, that is, requesting a read
lock while having the write lock already.lockingObject - The object locking the designated object.lockedObject - The object to lock.timeout - The time to wait for the lock. A timeout <= 0 means to wait
forever (or until the lock is granted).java.lang.InterruptedException - If the thread is interrupted while waiting for
the lock, an InterruptedException will be thrown.java.util.concurrent.TimeoutException - If the designated timeout elapsed before the lock
can be acquired, a TimeoutException will be thrown.