package com.sleepycat.je.latch; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.RunRecoveryException; import de.ovgu.cide.jakutil.*; public interface Latch { /** * Set the latch name, used for latches in objects instantiated from * the log. */ public void setName( String name); /** * Acquire a latch for exclusive/write access. * <p>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.</p> * @throws LatchException if the latch is already held by the calling * thread. * @throws RunRecoveryException if an InterruptedException exception * occurs. */ public void acquire() throws DatabaseException ; /** * Acquire a latch for exclusive/write access, but do not block if it's not * available. * @return true if the latch was acquired, false if it is not available. * @throws LatchException if the latch is already held by the calling * thread. */ public boolean acquireNoWait() throws LatchException ; /** * 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; */ public void releaseIfOwner(); /** * 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. */ public void release() throws LatchNotHeldException ; /** * Return true if the current thread holds this latch. * @return true if we hold this latch. False otherwise. */ public boolean isOwner(); /** * Used only for unit tests. * @return the thread that currently holds the latch for exclusive access. */ public Thread owner(); /** * Return the number of threads waiting. * @return the number of threads waiting for the latch. */ public int nWaiters(); /** * Formats a latch owner and waiters. */ public String toString(); }