com.sleepycat.je.latch
Class Latch

java.lang.Object
  extended by com.sleepycat.je.latch.Latch

public class Latch
extends Object

Simple thread-based non-transactional exclusive non-nestable latch.

Latches provide simple exclusive transient locks on objects. Latches are expected to be held for short, defined periods of time. No deadlock detection is provided so it is the caller's responsibility to sequence latch acquisition in an ordered fashion to avoid deadlocks.

A latch can be acquire in wait or no-wait modes. In the former, the caller will wait for any conflicting holders to release the latch. In the latter, if the latch is not available, control returns to the caller immediately.


Constructor Summary
Latch(EnvironmentImpl env)
          Create a latch with no name, more optimal for shortlived latches.
Latch(String name, EnvironmentImpl env)
          Create a latch.
 
Method Summary
 void acquire()
          Acquire a latch for exclusive/write access.
 boolean acquireNoWait()
          Acquire a latch for exclusive/write access, but do not block if it's not available.
static void clearNotes()
           
static int countLatchesHeld()
          Only call under the assert system.
static void dumpLatchesHeld()
           
 LatchStats getLatchStats()
           
 boolean isOwner()
          Return true if the current thread holds this latch.
static String latchesHeldToString()
           
(package private)  int nWaiters()
          Return the number of threads waiting.
(package private)  Thread owner()
          Used only for unit tests.
 void release()
          Release the latch.
 void releaseIfOwner()
          Release the latch.
 void setName(String name)
          Set the latch name, used for latches in objects instantiated from the log.
 String toString()
          Formats a latch owner and waiters.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Latch

public Latch(String name,
             EnvironmentImpl env)
Create a latch.


Latch

public Latch(EnvironmentImpl env)
Create a latch with no name, more optimal for shortlived latches.

Method Detail

setName

public void setName(String name)
Set the latch name, used for latches in objects instantiated from the log.


acquire

public void acquire()
             throws DatabaseException
Acquire a latch for exclusive/write access.

Wait for the latch if some other thread is holding it. If there are threads waiting for access, they will be granted the latch on a FIFO basis. When the method returns, the latch is held for exclusive access.

Throws:
LatchException - if the latch is already held by the calling thread.
RunRecoveryException - if an InterruptedException exception occurs.
DatabaseException

acquireNoWait

public boolean acquireNoWait()
                      throws LatchException
Acquire a latch for exclusive/write access, but do not block if it's not available.

Returns:
true if the latch was acquired, false if it is not available.
Throws:
LatchException - if the latch is already held by the calling thread.

releaseIfOwner

public void releaseIfOwner()
Release the latch. If there are other thread(s) waiting for the latch, one is woken up and granted the latch. If the latch was not owned by the caller, just return;


release

public void release()
             throws LatchNotHeldException
Release the latch. If there are other thread(s) waiting for the latch, they are woken up and granted the latch.

Throws:
LatchNotHeldException - if the latch is not currently held.

isOwner

public boolean isOwner()
Return true if the current thread holds this latch.

Returns:
true if we hold this latch. False otherwise.

owner

Thread owner()
Used only for unit tests.

Returns:
the thread that currently holds the latch for exclusive access.

nWaiters

int nWaiters()
Return the number of threads waiting.

Returns:
the number of threads waiting for the latch.

getLatchStats

public LatchStats getLatchStats()
Returns:
a LatchStats object with information about this latch.

toString

public String toString()
Formats a latch owner and waiters.

Overrides:
toString in class Object

countLatchesHeld

public static int countLatchesHeld()
Only call under the assert system. This records counts held latches.


dumpLatchesHeld

public static void dumpLatchesHeld()

latchesHeldToString

public static String latchesHeldToString()

clearNotes

public static void clearNotes()


Copyright 2004-2005 Sleepycat, Inc. All Rights Reserved.