Class Lock

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public abstract class Lock
    extends java.lang.Object
    implements java.io.Closeable
    An interprocess mutex lock.

    Typical use might look like:

     new Lock.With(directory.makeLock("my.lock")) {
         public Object doBody() {
           ... code to execute while locked ...
         }
       }.run();
     
    See Also:
    Directory.makeLock(String)
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  Lock.With
      Utility class for executing code with exclusive access.
    • Constructor Summary

      Constructors 
      Constructor Description
      Lock()  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      abstract void close()
      Releases exclusive access.
      abstract boolean isLocked()
      Returns true if the resource is currently locked.
      abstract boolean obtain()
      Attempts to obtain exclusive access and immediately return upon success or failure.
      boolean obtain​(long lockWaitTimeout)
      Attempts to obtain an exclusive lock within amount of time given.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOCK_POLL_INTERVAL

        public static long LOCK_POLL_INTERVAL
        How long obtain(long) waits, in milliseconds, in between attempts to acquire the lock.
      • LOCK_OBTAIN_WAIT_FOREVER

        public static final long LOCK_OBTAIN_WAIT_FOREVER
        Pass this value to obtain(long) to try forever to obtain the lock.
        See Also:
        Constant Field Values
    • Constructor Detail

      • Lock

        public Lock()
    • Method Detail

      • obtain

        public abstract boolean obtain()
                                throws java.io.IOException
        Attempts to obtain exclusive access and immediately return upon success or failure. Use close() to release the lock.
        Returns:
        true iff exclusive access is obtained
        Throws:
        java.io.IOException
      • obtain

        public boolean obtain​(long lockWaitTimeout)
                       throws java.io.IOException
        Attempts to obtain an exclusive lock within amount of time given. Polls once per LOCK_POLL_INTERVAL (currently 1000) milliseconds until lockWaitTimeout is passed.
        Parameters:
        lockWaitTimeout - length of time to wait in milliseconds or LOCK_OBTAIN_WAIT_FOREVER to retry forever
        Returns:
        true if lock was obtained
        Throws:
        LockObtainFailedException - if lock wait times out
        java.lang.IllegalArgumentException - if lockWaitTimeout is out of bounds
        java.io.IOException - if obtain() throws IOException
      • close

        public abstract void close()
                            throws java.io.IOException
        Releases exclusive access.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • isLocked

        public abstract boolean isLocked()
                                  throws java.io.IOException
        Returns true if the resource is currently locked. Note that one must still call obtain() before using the resource.
        Throws:
        java.io.IOException