public interface ILock
Locks are reentrant. That is, they can be acquired multiple times by the same thread without releasing. Locks are only released when the number of successful acquires equals the number of successful releases.
Locks are capable of detecting and recovering from programming errors that cause circular waiting deadlocks. When a deadlock between two or more ILock instances is detected, detailed debugging information is printed to the log file. The locks will then automatically recover from the deadlock by employing a release and wait strategy. One thread will lose control of the locks it owns, thus breaking the deadlock and allowing other threads to proceed. Once that thread's locks are all available, it will be given exclusive access to all its locks and allowed to proceed. A thread can only lose locks while it is waiting on an acquire() call.
Successive acquire attempts by different threads are queued and serviced on a first come, first served basis.
It is very important that acquired locks eventually get released. Calls to release should be done in a finally block to ensure they execute. For example:
try { lock.acquire(); // ... do work here ... } finally { lock.release(); }Note: although lock.acquire should never fail, it is good practice to place it inside the try block anyway. Releasing without acquiring is far less catastrophic than acquiring without releasing.
IJobManager.newLock()
Modifier and Type | Method and Description |
---|---|
void |
acquire()
Acquires this lock.
|
boolean |
acquire(long delay)
Attempts to acquire this lock.
|
int |
getDepth()
Returns the number of nested acquires on this lock that have not been released.
|
void |
release()
Releases this lock.
|
boolean acquire(long delay) throws InterruptedException
While a thread is waiting, locks it already owns may be granted to other threads if necessary to break a deadlock. In this situation, the calling thread may be blocked for longer than the specified delay. On returning from this call, the calling thread will once again have exclusive access to any other locks it owned upon entering the acquire method.
delay
- the number of milliseconds to delaytrue
if the lock was successfully acquired, and
false
otherwise.InterruptedException
- if the thread was interruptedvoid acquire()
This implementation ignores attempts to interrupt the thread. If response to
interruption is needed, use the method acquire(long)
int getDepth()
void release()
Copyright (c) 2000, 2015 Eclipse Contributors and others. All rights reserved.Guidelines for using Eclipse APIs.