Class RWOLockManager<OBJECT,CONTEXT>
- java.lang.Object
-
- org.eclipse.net4j.util.event.Notifier
-
- org.eclipse.net4j.util.lifecycle.Lifecycle
-
- org.eclipse.net4j.util.concurrent.RWOLockManager<OBJECT,CONTEXT>
-
- All Implemented Interfaces:
IRWLockManager<OBJECT,CONTEXT>,IRWOLockManager<OBJECT,CONTEXT>,INotifier,INotifier.INotifier2,IDeactivateable,ILifecycle,ILifecycle.DeferrableActivation
public class RWOLockManager<OBJECT,CONTEXT> extends Lifecycle implements IRWOLockManager<OBJECT,CONTEXT>
Keeps track of locks on objects. Locks are owned by contexts. A particular combination of locks and their owners, for a given object, is represented by instances of theRWOLockManager.LockStateclass. This class is also responsible for deciding whether or not a new lock can be granted, based on the locks already present.- Since:
- 3.2
- Author:
- Caspar De Groot
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classRWOLockManager.LockState<OBJECT,CONTEXT>Represents a combination of locks for one OBJECT.-
Nested classes/interfaces inherited from interface org.eclipse.net4j.util.lifecycle.ILifecycle
ILifecycle.DeferrableActivation
-
Nested classes/interfaces inherited from interface org.eclipse.net4j.util.event.INotifier
INotifier.INotifier2
-
Nested classes/interfaces inherited from interface org.eclipse.net4j.util.concurrent.IRWLockManager
IRWLockManager.LockType
-
-
Field Summary
-
Fields inherited from interface org.eclipse.net4j.util.concurrent.IRWLockManager
NO_WAIT, WAIT
-
-
Constructor Summary
Constructors Constructor Description RWOLockManager()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidchangeContext(CONTEXT oldContext, CONTEXT newContext)protected java.util.Map<CONTEXT,java.util.Set<RWOLockManager.LockState<OBJECT,CONTEXT>>>createContextToLocksMap()protected java.util.Map<OBJECT,RWOLockManager.LockState<OBJECT,CONTEXT>>createObjectToLocksMap()protected longcurrentTimeMillis()protected java.util.Map<CONTEXT,java.util.Set<RWOLockManager.LockState<OBJECT,CONTEXT>>>getContextToLocksMap()All access to the returned map must be properly synchronized on thisRWOLockManager.RWOLockManager.LockState<OBJECT,CONTEXT>getLockState(OBJECT key)java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>>getLockStates()protected java.util.Map<OBJECT,RWOLockManager.LockState<OBJECT,CONTEXT>>getObjectToLocksMap()All access to the returned map must be properly synchronized on thisRWOLockManager.booleanhasLock(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock)booleanhasLockByOthers(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock)voidlock(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToLock, long timeout)voidlock(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock, long timeout)java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>>lock2(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToLock, long timeout)Adds locks of the given type, owned by the given context on the given objects.voidsetLockState(OBJECT key, RWOLockManager.LockState<OBJECT,CONTEXT> lockState)static voidsetUnlockAll(boolean on)voidunlock(CONTEXT context)Attempts to release all locks(read and write) for a given context.voidunlock(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToUnlock)Attempts to release for a given locktype, context and objects.java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>>unlock2(CONTEXT context)Removes all locks owned by the given context on any objects.java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>>unlock2(CONTEXT context, java.util.Collection<? extends OBJECT> objectsToUnlock)Removes all locks owned by the given context.java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>>unlock2(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToUnlock)Removes all locks of the given type, owned by the given context on the given objects.-
Methods inherited from class org.eclipse.net4j.util.lifecycle.Lifecycle
activate, checkActive, checkArg, checkArg, checkInactive, checkNull, checkState, checkState, deactivate, deferredActivate, doActivate, doAfterActivate, doBeforeActivate, doBeforeDeactivate, doDeactivate, dump, getLifecycleState, isActive, isDeferredActivation, toString
-
Methods inherited from class org.eclipse.net4j.util.event.Notifier
addListener, addUniqueListener, fireEvent, fireEvent, fireEvent, fireThrowable, firstListenerAdded, getListeners, getNotificationService, hasListener, hasListeners, lastListenerRemoved, listenerAdded, listenerRemoved, removeListener
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.net4j.util.event.INotifier
addListener, getListeners, hasListeners, removeListener
-
-
-
-
Method Detail
-
lock
public void lock(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToLock, long timeout) throws java.lang.InterruptedException
- Specified by:
lockin interfaceIRWLockManager<OBJECT,CONTEXT>- Throws:
java.lang.InterruptedException
-
lock2
public java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>> lock2(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToLock, long timeout) throws java.lang.InterruptedException
Description copied from interface:IRWOLockManagerAdds locks of the given type, owned by the given context on the given objects.- Specified by:
lock2in interfaceIRWOLockManager<OBJECT,CONTEXT>- Throws:
java.lang.InterruptedException
-
lock
public void lock(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock, long timeout) throws java.lang.InterruptedException
- Specified by:
lockin interfaceIRWLockManager<OBJECT,CONTEXT>- Throws:
java.lang.InterruptedException
-
unlock
public void unlock(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToUnlock)
Description copied from interface:IRWLockManagerAttempts to release for a given locktype, context and objects.- Specified by:
unlockin interfaceIRWLockManager<OBJECT,CONTEXT>
-
unlock2
public java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>> unlock2(CONTEXT context, java.util.Collection<? extends OBJECT> objectsToUnlock)
Description copied from interface:IRWOLockManagerRemoves all locks owned by the given context.- Specified by:
unlock2in interfaceIRWOLockManager<OBJECT,CONTEXT>
-
unlock2
public java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>> unlock2(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToUnlock)
Description copied from interface:IRWOLockManagerRemoves all locks of the given type, owned by the given context on the given objects.- Specified by:
unlock2in interfaceIRWOLockManager<OBJECT,CONTEXT>
-
unlock
public void unlock(CONTEXT context)
Description copied from interface:IRWLockManagerAttempts to release all locks(read and write) for a given context.- Specified by:
unlockin interfaceIRWLockManager<OBJECT,CONTEXT>
-
unlock2
public java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>> unlock2(CONTEXT context)
Description copied from interface:IRWOLockManagerRemoves all locks owned by the given context on any objects.- Specified by:
unlock2in interfaceIRWOLockManager<OBJECT,CONTEXT>
-
hasLock
public boolean hasLock(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock)
- Specified by:
hasLockin interfaceIRWLockManager<OBJECT,CONTEXT>
-
hasLockByOthers
public boolean hasLockByOthers(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock)
- Specified by:
hasLockByOthersin interfaceIRWLockManager<OBJECT,CONTEXT>
-
currentTimeMillis
protected long currentTimeMillis()
-
createObjectToLocksMap
protected java.util.Map<OBJECT,RWOLockManager.LockState<OBJECT,CONTEXT>> createObjectToLocksMap()
-
createContextToLocksMap
protected java.util.Map<CONTEXT,java.util.Set<RWOLockManager.LockState<OBJECT,CONTEXT>>> createContextToLocksMap()
-
getObjectToLocksMap
protected final java.util.Map<OBJECT,RWOLockManager.LockState<OBJECT,CONTEXT>> getObjectToLocksMap()
All access to the returned map must be properly synchronized on thisRWOLockManager.
-
getContextToLocksMap
protected final java.util.Map<CONTEXT,java.util.Set<RWOLockManager.LockState<OBJECT,CONTEXT>>> getContextToLocksMap()
All access to the returned map must be properly synchronized on thisRWOLockManager.
-
getLockState
public RWOLockManager.LockState<OBJECT,CONTEXT> getLockState(OBJECT key)
-
getLockStates
public java.util.List<RWOLockManager.LockState<OBJECT,CONTEXT>> getLockStates()
- Since:
- 3.5
-
setLockState
public void setLockState(OBJECT key, RWOLockManager.LockState<OBJECT,CONTEXT> lockState)
-
setUnlockAll
public static void setUnlockAll(boolean on)
- Since:
- 3.7
-
-