## org.apache.lucene.store
Class Lock

    java.lang.Object
      org.apache.lucene.store.Lock

Direct Known Subclasses:
  DbLock, JELock

    public abstract class Lock

extends Object

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();

Version:
  $Id: Lock.java 595448 2007-11-15 20:42:54Z mikemccand $
See Also:
  `Directory.makeLock(String)`

Nested Class Summary
`static class` `Lock.With` Utility class for executing code with exclusive access.

Field Summary
`protected Throwable` `failureReason` If a lock obtain called, this failureReason may be set with the "root cause" Exception as to why the lock was not obtained.
`static long` `LOCK_OBTAIN_WAIT_FOREVER` Pass this value to `obtain(long)` to try forever to obtain the lock.
`static long` `LOCK_POLL_INTERVAL` How long `obtain(long)` waits, in milliseconds, in between attempts to acquire the lock.

Constructor Summary
`Lock()`

Method Summary
`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.
`abstract void` `release()` Releases exclusive access.

Methods inherited from class java.lang.Object
`clone, equals, finalize, 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

### failureReason

    protected Throwable failureReason

  If a lock obtain called, this failureReason may be set with the "root cause" Exception as to why the lock was not obtained.

Constructor Detail

### Lock

    public Lock()

Method Detail

### obtain

    public abstract boolean obtain()
                            throws IOException

  Attempts to obtain exclusive access and immediately return upon success or failure.

  Returns:
    true iff exclusive access is obtained
  Throws:
    `IOException`

### obtain

    public boolean obtain(long lockWaitTimeout)
                   throws LockObtainFailedException,
                          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
    `IllegalArgumentException` - if lockWaitTimeout is out of bounds
    `IOException` - if obtain() throws IOException

### release

    public abstract void release()
                          throws IOException

  Releases exclusive access.

  Throws:
    `IOException`

### isLocked

    public abstract boolean isLocked()

  Returns true if the resource is currently locked. Note that one must still call `obtain()` before using the resource.

Copyright © 2000-2008 Apache Software Foundation. All Rights Reserved.