Class ReentrantLock.WriteLock
- java.lang.Object
-
- de.aristaflow.adept2.util.locking.ReentrantLock.Lock
-
- de.aristaflow.adept2.util.locking.ReentrantLock.WriteLock
-
- Enclosing class:
- ReentrantLock<T>
protected class ReentrantLock.WriteLock extends ReentrantLock.Lock
Represents a write lock which allows an object to hold the lock multiple times. an object requesting a write lock blocks objects that request a read lock.
-
-
Field Summary
-
Fields inherited from class de.aristaflow.adept2.util.locking.ReentrantLock.Lock
invalidated, lockCountManager, waitersForLock
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
WriteLock(LockCountManager<? super T> lockCountManager)
Creates a new write lock using the designatedLockCountManager
for comparing objects.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
lock(T object, long origTimeout)
Provides the designated object with a write lock.protected boolean
notificationRequired()
Gets whether a notification of waiting threads is required.-
Methods inherited from class de.aristaflow.adept2.util.locking.ReentrantLock.Lock
currentLockingObject, hasLock, invalidate, isLocked, lock, objectsWaitingToLock, unlock
-
-
-
-
Constructor Detail
-
WriteLock
protected WriteLock(LockCountManager<? super T> lockCountManager)
Creates a new write lock using the designatedLockCountManager
for comparing objects.- Parameters:
lockCountManager
- The manager counting locks for objects.
-
-
Method Detail
-
lock
public void lock(T object, long origTimeout) throws InterruptedException, TimeoutException
Provides the designated object with a write lock. The current thread will be blocked until the lock can be acquired or the timeout elapsed. Writers have priority, that is the currently active readers may proceed but successive readers will be blocked until no writer is active or waiting.Since the lock is reentrant, an object may acquire a lock multiple times. But it also has to release the lock per acquisition afterwards.
- Overrides:
lock
in classReentrantLock.Lock
- Parameters:
object
- The object that requests a write lock.origTimeout
- The time to wait for the lock. A timeout <= 0 means to wait forever (or until the lock is granted).- Throws:
InterruptedException
- If the thread is interrupted while waiting for the lock, anInterruptedException
will be thrown.TimeoutException
- If the designated timeout elapsed before the lock can be acquired, aTimeoutException
will be thrown.
-
notificationRequired
protected boolean notificationRequired()
Gets whether a notification of waiting threads is required. This depends on whether there are no more locks and whether there are threads waiting for the lock. This also respects readers that wait to lock.- Overrides:
notificationRequired
in classReentrantLock.Lock
- Returns:
- Whether a notification of waiting threads is required (no more locks and there are waiters for the lock).
-
-