Class InterProcessMultiLock

  • All Implemented Interfaces:
    InterProcessLock

    public class InterProcessMultiLock
    extends Object
    implements InterProcessLock
    A container that manages multiple locks as a single entity. When acquire() is called, all the locks are acquired. If that fails, any paths that were acquired are released. Similarly, when release() is called, all locks are released (failures are ignored).
    • Constructor Detail

      • InterProcessMultiLock

        public InterProcessMultiLock​(CuratorFramework client,
                                     List<String> paths)
        Creates a multi lock of InterProcessMutexs
        Parameters:
        client - the client
        paths - list of paths to manage in the order that they are to be locked
      • InterProcessMultiLock

        public InterProcessMultiLock​(List<InterProcessLock> locks)
        Creates a multi lock of any type of inter process lock
        Parameters:
        locks - the locks
    • Method Detail

      • acquire

        public boolean acquire​(long time,
                               TimeUnit unit)
                        throws Exception
        Acquire the mutex - blocks until it's available or the given time expires. Each call to acquire that returns true must be balanced by a call to InterProcessLock.release()
        Specified by:
        acquire in interface InterProcessLock
        Parameters:
        time - time to wait
        unit - time unit
        Returns:
        true if the mutex was acquired, false if not
        Throws:
        Exception - ZK errors, connection interruptions
      • release

        public void release()
                     throws Exception
        Perform one release of the mutex.

        NOTE: locks are released in the reverse order that they were acquired.

        Specified by:
        release in interface InterProcessLock
        Throws:
        Exception - ZK errors, interruptions, current thread does not own the lock