Class InterProcessMutex
java.lang.Object
org.apache.curator.framework.recipes.locks.InterProcessMutex
- All Implemented Interfaces:
InterProcessLock
,Revocable<InterProcessMutex>
- Direct Known Subclasses:
InterProcessReadWriteLock.ReadLock
,InterProcessReadWriteLock.WriteLock
public class InterProcessMutex
extends Object
implements InterProcessLock, Revocable<InterProcessMutex>
A re-entrant mutex that works across JVMs. Uses Zookeeper to hold the lock. All processes in all JVMs that
use the same lock path will achieve an inter-process critical section. Further, this mutex is
"fair" - each user will get the mutex in the order requested (from ZK's point of view)
-
Constructor Summary
ConstructorDescriptionInterProcessMutex
(CuratorFramework client, String path) InterProcessMutex
(CuratorFramework client, String path, LockInternalsDriver driver) -
Method Summary
Modifier and TypeMethodDescriptionvoid
acquire()
Acquire the mutex - blocking until it's available.boolean
Acquire the mutex - blocks until it's available or the given time expires.protected byte[]
protected String
Return a sorted list of all current nodes participating in the lockboolean
Returns true if the mutex is acquired by a thread in this JVMboolean
Returns true if the mutex is acquired by the calling threadvoid
makeRevocable
(RevocationListener<InterProcessMutex> listener) Make the lock revocable.void
makeRevocable
(RevocationListener<InterProcessMutex> listener, Executor executor) Make the lock revocable.void
release()
Perform one release of the mutex if the calling thread is the same thread that acquired it.
-
Constructor Details
-
InterProcessMutex
- Parameters:
client
- clientpath
- the path to lock
-
InterProcessMutex
- Parameters:
client
- clientpath
- the path to lockdriver
- lock driver
-
-
Method Details
-
acquire
Acquire the mutex - blocking until it's available. Note: the same thread can call acquire re-entrantly. Each call to acquire must be balanced by a call torelease()
- Specified by:
acquire
in interfaceInterProcessLock
- Throws:
Exception
- ZK errors, connection interruptions
-
acquire
Acquire the mutex - blocks until it's available or the given time expires. Note: the same thread can call acquire re-entrantly. Each call to acquire that returns true must be balanced by a call torelease()
- Specified by:
acquire
in interfaceInterProcessLock
- Parameters:
time
- time to waitunit
- time unit- Returns:
- true if the mutex was acquired, false if not
- Throws:
Exception
- ZK errors, connection interruptions
-
isAcquiredInThisProcess
public boolean isAcquiredInThisProcess()Returns true if the mutex is acquired by a thread in this JVM- Specified by:
isAcquiredInThisProcess
in interfaceInterProcessLock
- Returns:
- true/false
-
release
Perform one release of the mutex if the calling thread is the same thread that acquired it. If the thread had made multiple calls to acquire, the mutex will still be held when this method returns.- Specified by:
release
in interfaceInterProcessLock
- Throws:
Exception
- ZK errors, interruptions, current thread does not own the lock
-
getParticipantNodes
Return a sorted list of all current nodes participating in the lock- Returns:
- list of nodes
- Throws:
Exception
- ZK errors, interruptions, etc.
-
makeRevocable
Description copied from interface:Revocable
Make the lock revocable. Your listener will get called when another process/thread wants you to release the lock. Revocation is cooperative.- Specified by:
makeRevocable
in interfaceRevocable<InterProcessMutex>
- Parameters:
listener
- the listener
-
makeRevocable
Description copied from interface:Revocable
Make the lock revocable. Your listener will get called when another process/thread wants you to release the lock. Revocation is cooperative.- Specified by:
makeRevocable
in interfaceRevocable<InterProcessMutex>
- Parameters:
listener
- the listenerexecutor
- executor for the listener
-
isOwnedByCurrentThread
public boolean isOwnedByCurrentThread()Returns true if the mutex is acquired by the calling thread- Returns:
- true/false
-
getLockNodeBytes
protected byte[] getLockNodeBytes() -
getLockPath
-