|
|
|
@ -18,7 +18,7 @@ package org.redisson.api;
|
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Distributed implementation of {@link java.util.concurrent.CountDownLatch}
|
|
|
|
|
* Redis based implementation of {@link java.util.concurrent.CountDownLatch}
|
|
|
|
|
*
|
|
|
|
|
* It has an advantage over {@link java.util.concurrent.CountDownLatch} --
|
|
|
|
|
* count can be set via {@link #trySetCount} method.
|
|
|
|
@ -29,95 +29,33 @@ import java.util.concurrent.TimeUnit;
|
|
|
|
|
public interface RCountDownLatch extends RObject, RCountDownLatchAsync {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Causes the current thread to wait until the latch has counted down to
|
|
|
|
|
* zero, unless the thread is {@linkplain Thread#interrupt interrupted}.
|
|
|
|
|
* Waits until counter reach zero.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current count is zero then this method returns immediately.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current count is greater than zero then the current
|
|
|
|
|
* thread becomes disabled for thread scheduling purposes and lies
|
|
|
|
|
* dormant until one of two things happen:
|
|
|
|
|
* <ul>
|
|
|
|
|
* <li>The count reaches zero due to invocations of the
|
|
|
|
|
* {@link #countDown} method; or
|
|
|
|
|
* <li>Some other thread {@linkplain Thread#interrupt interrupts}
|
|
|
|
|
* the current thread.
|
|
|
|
|
* </ul>
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current thread:
|
|
|
|
|
* <ul>
|
|
|
|
|
* <li>has its interrupted status set on entry to this method; or
|
|
|
|
|
* <li>is {@linkplain Thread#interrupt interrupted} while waiting,
|
|
|
|
|
* </ul>
|
|
|
|
|
* then {@link InterruptedException} is thrown and the current thread's
|
|
|
|
|
* interrupted status is cleared.
|
|
|
|
|
*
|
|
|
|
|
* @throws InterruptedException if the current thread is interrupted
|
|
|
|
|
* while waiting
|
|
|
|
|
* @throws InterruptedException if the current thread was interrupted
|
|
|
|
|
*/
|
|
|
|
|
void await() throws InterruptedException;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Causes the current thread to wait until the latch has counted down to
|
|
|
|
|
* zero, unless the thread is {@linkplain Thread#interrupt interrupted},
|
|
|
|
|
* or the specified waiting time elapses.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current count is zero then this method returns immediately
|
|
|
|
|
* with the value {@code true}.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current count is greater than zero then the current
|
|
|
|
|
* thread becomes disabled for thread scheduling purposes and lies
|
|
|
|
|
* dormant until one of three things happen:
|
|
|
|
|
* <ul>
|
|
|
|
|
* <li>The count reaches zero due to invocations of the
|
|
|
|
|
* {@link #countDown} method; or
|
|
|
|
|
* <li>Some other thread {@linkplain Thread#interrupt interrupts}
|
|
|
|
|
* the current thread; or
|
|
|
|
|
* <li>The specified waiting time elapses.
|
|
|
|
|
* </ul>
|
|
|
|
|
*
|
|
|
|
|
* <p>If the count reaches zero then the method returns with the
|
|
|
|
|
* value {@code true}.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current thread:
|
|
|
|
|
* <ul>
|
|
|
|
|
* <li>has its interrupted status set on entry to this method; or
|
|
|
|
|
* <li>is {@linkplain Thread#interrupt interrupted} while waiting,
|
|
|
|
|
* </ul>
|
|
|
|
|
* then {@link InterruptedException} is thrown and the current thread's
|
|
|
|
|
* interrupted status is cleared.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the specified waiting time elapses then the value {@code false}
|
|
|
|
|
* is returned. If the time is less than or equal to zero, the method
|
|
|
|
|
* will not wait at all.
|
|
|
|
|
* Waits until counter reach zero or up to defined <code>timeout</code>.
|
|
|
|
|
*
|
|
|
|
|
* @param timeout the maximum time to wait
|
|
|
|
|
* @param unit the time unit of the {@code timeout} argument
|
|
|
|
|
* @return {@code true} if the count reached zero and {@code false}
|
|
|
|
|
* if the waiting time elapsed before the count reached zero
|
|
|
|
|
* @throws InterruptedException if the current thread is interrupted
|
|
|
|
|
* while waiting
|
|
|
|
|
* @param unit the time unit
|
|
|
|
|
* @return <code>true</code> if the count reached zero and <code>false</code>
|
|
|
|
|
* if timeout reached before the count reached zero
|
|
|
|
|
* @throws InterruptedException if the current thread was interrupted
|
|
|
|
|
*/
|
|
|
|
|
boolean await(long timeout, TimeUnit unit) throws InterruptedException;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Decrements the count of the latch, releasing all waiting threads if
|
|
|
|
|
* the count reaches zero.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current count is greater than zero then it is decremented.
|
|
|
|
|
* If the new count is zero then all waiting threads are re-enabled for
|
|
|
|
|
* thread scheduling purposes.
|
|
|
|
|
*
|
|
|
|
|
* <p>If the current count equals zero then nothing happens.
|
|
|
|
|
* Decrements the counter of the latch.
|
|
|
|
|
* Notifies all waiting threads when count reaches zero.
|
|
|
|
|
*/
|
|
|
|
|
void countDown();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the current count.
|
|
|
|
|
*
|
|
|
|
|
* <p>This method is typically used for debugging and testing purposes.
|
|
|
|
|
* Returns value of current count.
|
|
|
|
|
*
|
|
|
|
|
* @return the current count
|
|
|
|
|
* @return current count
|
|
|
|
|
*/
|
|
|
|
|
long getCount();
|
|
|
|
|
|
|
|
|
|