@InterfaceAudience.Private public class IdLock extends Object
IdLock.Entry lockEntry = idLock.getLockEntry(id);
try {
// User code.
} finally {
idLock.releaseLockEntry(lockEntry);
}| Modifier and Type | Class and Description |
|---|---|
static class |
IdLock.Entry
An entry returned to the client as a lock object
|
| Modifier and Type | Field and Description |
|---|---|
private static org.slf4j.Logger |
LOG |
private ConcurrentMap<Long,IdLock.Entry> |
map |
| Constructor and Description |
|---|
IdLock() |
| Modifier and Type | Method and Description |
|---|---|
(package private) void |
assertMapEmpty() |
IdLock.Entry |
getLockEntry(long id)
Blocks until the lock corresponding to the given id is acquired.
|
boolean |
isHeldByCurrentThread(long id)
Test whether the given id is already locked by the current thread.
|
void |
releaseLockEntry(IdLock.Entry entry)
Must be called in a finally block to decrease the internal counter and remove the monitor
object for the given id if the caller is the last client.
|
IdLock.Entry |
tryLockEntry(long id,
long time)
Blocks until the lock corresponding to the given id is acquired.
|
void |
waitForWaiters(long id,
int numWaiters) |
private static final org.slf4j.Logger LOG
private ConcurrentMap<Long,IdLock.Entry> map
public IdLock()
public IdLock.Entry getLockEntry(long id) throws IOException
id - an arbitrary number to lock onreleaseLockEntry(Entry) to release
the lockIOException - if interruptedpublic IdLock.Entry tryLockEntry(long id, long time) throws IOException
id - an arbitrary number to lock ontime - time to wait in msreleaseLockEntry(Entry) to release
the lockIOException - if interruptedpublic void releaseLockEntry(IdLock.Entry entry)
entry - the return value of getLockEntry(long)public boolean isHeldByCurrentThread(long id)
void assertMapEmpty()
public void waitForWaiters(long id, int numWaiters) throws InterruptedException
InterruptedExceptionCopyright © 2007–2020 The Apache Software Foundation. All rights reserved.