public abstract class DistributedLockService extends Object
A named instance of DistributedLockService defines a space for locking arbitrary names across the distributed system defined by a specified distribution manager. Any number of DistributedLockService instances can be created with different service names. For all processes in the distributed system that have created an instance of DistributedLockService with the same name, no more than one thread is permitted to own the lock on a given name in that instance at any point in time. Additionally, a thread can lock the entire service, preventing any other threads in the system from locking the service or any names in the service.
Modifier | Constructor and Description |
---|---|
protected |
DistributedLockService()
Public instance creation is prohibited - use
create(String, DistributedSystem) |
Modifier and Type | Method and Description |
---|---|
abstract void |
becomeLockGrantor()
Specifies this member to become the grantor for this lock service.
|
static void |
becomeLockGrantor(String serviceName)
Specifies that this member should become the grantor for the named locking service.
|
static DistributedLockService |
create(String serviceName,
DistributedSystem ds)
Create a DistributedLockService with the given serviceName for the given DistributedSystem.
|
static void |
destroy(String serviceName)
Destroy a previously created DistributedLockService with the given
serviceName . |
abstract void |
freeResources(Object name)
Free internal resources associated with the given
name . |
static DistributedLockService |
getServiceNamed(String serviceName)
Look up and return the DistributedLockService with the given name, if it has been created in
this VM.
|
abstract boolean |
isHeldByCurrentThread(Object name)
Determine whether the current thread owns the lock on the given object.
|
abstract boolean |
isLockGrantor()
Returns true if this member is currently the lock authority responsible for granting locks for
this service.
|
static boolean |
isLockGrantor(String serviceName)
Returns true if this member is the grantor for the named service.
|
abstract boolean |
isLockingSuspendedByCurrentThread()
Determine whether the current thread has suspended locking in this DistributedLockService.
|
abstract boolean |
lock(Object name,
long waitTimeMillis,
long leaseTimeMillis)
Attempts to acquire a lock named
name . |
abstract boolean |
lockInterruptibly(Object name,
long waitTimeMillis,
long leaseTimeMillis)
Deprecated.
as of GemFire 5.1, use
lock(Object, long, long) with waitTimeMillis
instead |
abstract void |
resumeLocking()
Allow locking to resume in this DistributedLockService instance.
|
abstract boolean |
suspendLocking(long waitTimeMillis)
Suspend granting of locks in this service.
|
abstract boolean |
suspendLockingInterruptibly(long waitTimeMillis)
Deprecated.
as of GemFire 5.1, use
suspendLocking(long) with waitTimeMillis instead |
abstract void |
unlock(Object name)
Release the lock previously granted for the given
name . |
protected DistributedLockService()
create(String, DistributedSystem)
public static DistributedLockService create(String serviceName, DistributedSystem ds) throws IllegalArgumentException
destroy(java.lang.String)
is called, or ds
is disconnected, at which point any locks that were held by this
instance are released.serviceName
- the name of the DistributedLockService to create.ds
- the DistributedSystem
for the new service instance to use for
distributed lock messaging.IllegalArgumentException
- if serviceName is an illegal name or this process has already
created a DistributedLockService with the given serviceName
.IllegalStateException
- if this process is in the middle of disconnecting from the
DistributedSystem
public static DistributedLockService getServiceNamed(String serviceName)
serviceName
- the name of the DistributedLockService to look uppublic static void destroy(String serviceName) throws IllegalArgumentException
serviceName
.
Any locks currently held in this DistributedLockService by this process are released. Attempts
to access a destroyed lock service will result in a LockServiceDestroyedException
being
thrown.serviceName
- the name of the instance to destroy, previously supplied in the
create(String, DistributedSystem)
invocation.IllegalArgumentException
- if this process hasn't created a DistributedLockService with
the given serviceName
and dm
.public abstract boolean lock(Object name, long waitTimeMillis, long leaseTimeMillis)
Attempts to acquire a lock named name
. Returns true
as soon as the
lock is acquired. If the lock is currently held by another thread in this or any other process
in the distributed system, or another thread in the system has locked the entire service, this
method keeps trying to acquire the lock for up to waitTimeMillis
before giving up
and returning false
. If the lock is acquired, it is held until
unlock(Object name)
is invoked, or until leaseTimeMillis
milliseconds
have passed since the lock was granted - whichever comes first.
Locks are reentrant. If a thread invokes this method n times on the same instance, specifying
the same name
, without an intervening release or lease expiration expiration on
the lock, the thread must invoke unlock(name)
the same number of times before the
lock is released (unless the lease expires). When this method is invoked for a lock that is
already acquired, the lease time will be set to the maximum of the remaining least time from
the previous invocation, or leaseTimeMillis
name
- the name of the lock to acquire in this service. This object must conform to the
general contract of equals(Object)
and hashCode()
as described
in Object.hashCode()
.waitTimeMillis
- the number of milliseconds to try to acquire the lock before giving up
and returning false. A value of -1 causes this method to block until the lock is
acquired. A value of 0 causes this method to return false without waiting for the lock
if the lock is held by another member or thread.leaseTimeMillis
- the number of milliseconds to hold the lock after granting it, before
automatically releasing it if it hasn't already been released by invoking
unlock(Object)
. If leaseTimeMillis
is -1, hold the lock until
explicitly unlocked.waitTimeMillis
passed
without acquiring the lock.LockServiceDestroyedException
- if this lock service has been destroyed@Deprecated public abstract boolean lockInterruptibly(Object name, long waitTimeMillis, long leaseTimeMillis) throws InterruptedException
lock(Object, long, long)
with waitTimeMillis
instead
Attempts to acquire a lock named name
. Returns true
as soon as the
lock is acquired. If the lock is currently held by another thread in this or any other process
in the distributed system, or another thread in the system has locked the entire service, this
method keeps trying to acquire the lock for up to waitTimeMillis
before giving up
and returning false
. If the lock is acquired, it is held until
unlock(Object name)
is invoked, or until leaseTimeMillis
milliseconds
have passed since the lock was granted - whichever comes first.
Locks are reentrant. If a thread invokes this method n times on the same instance, specifying
the same name
, without an intervening release or lease expiration expiration on
the lock, the thread must invoke unlock(name)
the same number of times before the
lock is released (unless the lease expires). When this method is invoked for a lock that is
already acquired, the lease time will be set to the maximum of the remaining least time from
the previous invocation, or leaseTimeMillis
name
- the name of the lock to acquire in this service. This object must conform to the
general contract of equals(Object)
and hashCode()
as described
in Object.hashCode()
.waitTimeMillis
- the number of milliseconds to try to acquire the lock before giving up
and returning false. A value of -1 causes this method to block until the lock is
acquired.leaseTimeMillis
- the number of milliseconds to hold the lock after granting it, before
automatically releasing it if it hasn't already been released by invoking
unlock(Object)
. If leaseTimeMillis
is -1, hold the lock until
explicitly unlocked.waitTimeMillis
passed
without acquiring the lock.InterruptedException
- if the thread is interrupted before or during this method.LockServiceDestroyedException
- if this lock service has been destroyedpublic abstract void unlock(Object name) throws LeaseExpiredException
name
.name
- the object to unlock in this service.LockNotHeldException
- if the current thread is not the owner of this lockLeaseExpiredException
- if the current thread was the owner of this lock, but it's lease
has expired.LockServiceDestroyedException
- if the service has been destroyedpublic abstract boolean isHeldByCurrentThread(Object name)
name
- the name of the lock objectname
.LockServiceDestroyedException
- if this service has been destroyed@Deprecated public abstract boolean suspendLockingInterruptibly(long waitTimeMillis) throws InterruptedException
suspendLocking(long)
with waitTimeMillis insteadwaitTimeMillis
milliseconds have passed without
successfully granting suspension.waitTimeMillis
- the number of milliseconds to try to acquire suspension before giving up
and returning false. A value of -1 causes this method to block until suspension is
granted.waitTimeMillis
passed
before it could be granted.IllegalStateException
- if the current thread already has suspended locking on this
instance.InterruptedException
- if the current thread is interrupted.LockServiceDestroyedException
- if the service has been destroyedpublic abstract boolean suspendLocking(long waitTimeMillis)
waitTimeMillis
milliseconds have passed without
successfully granting suspension.waitTimeMillis
- the number of milliseconds to try to acquire suspension before giving up
and returning false. A value of -1 causes this method to block until suspension is
granted. A value of 0 causes this method to return false without waiting for the lock if
the lock is held by another member or thread.waitTimeMillis
passed
before it could be granted.IllegalStateException
- if the current thread already has suspended locking on this
instanceLockServiceDestroyedException
- if the service has been destroyedpublic abstract void resumeLocking()
IllegalStateException
- if the current thread didn't previously suspend lockingLockServiceDestroyedException
- if the service has been destroyedpublic abstract boolean isLockingSuspendedByCurrentThread()
LockServiceDestroyedException
- if this service has been destroyedpublic abstract void freeResources(Object name)
name
. This may reduce this VM's
memory use, but may also prohibit performance optimizations if name
is
subsequently locked in this VM.name
- the name of the lock objectLockServiceDestroyedException
- if this service has been destroyedpublic abstract void becomeLockGrantor()
Calls to this method will block until grantor authority has been transferred to this member.
If another member calls becomeLockGrantor
after this member, that member will
transfer grantor authority from this member to itself.
This operation should not be invoked repeatedly in an application. It is possible to create a lock service and have two or more members endlessly calling becomeLockGrantor to transfer grantorship back and forth.
LockServiceDestroyedException
- if this service has been destroyedpublic static void becomeLockGrantor(String serviceName) throws IllegalArgumentException
serviceName
- the name of the locking serviceIllegalArgumentException
- if serviceName
does not refer to any registered
locking service in this processbecomeLockGrantor()
public abstract boolean isLockGrantor()
becomeLockGrantor()
. If no member
has explicitly requested grantor authority, then one member participating in the service will
be implicitly selected. In either case, this method returns true if the calling member is the
grantor.LockServiceDestroyedException
- if lock service has been destroyedpublic static boolean isLockGrantor(String serviceName) throws IllegalArgumentException
serviceName
- the name of the locking serviceIllegalArgumentException
- if serviceName
does not refer to any registered
locking service in this processisLockGrantor()