Interface IgniteCondition

  • All Superinterfaces:
    Condition

    public interface IgniteCondition
    extends Condition
    This interface provides a rich API for working with condition objects associated with distributed reentrant locks.

    Functionality

    IgniteCondition provides functionality similar to java.util.concurrent.locks.Condition.
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      void await()
      Causes the current thread to wait until it is signalled or interrupted.
      boolean await​(long time, TimeUnit unit)
      Causes the current thread to wait until it is signalled or interrupted, or the specified waiting time elapses.
      long awaitNanos​(long nanosTimeout)
      Causes the current thread to wait until it is signalled or interrupted, or the specified waiting time elapses.
      void awaitUninterruptibly()
      Causes the current thread to wait until it is signalled.
      boolean awaitUntil​(Date deadline)
      Causes the current thread to wait until it is signalled or interrupted, or the specified deadline elapses.
      String name()
      Name of ignite condition.
      void signal()
      Wakes up one waiting thread.
      void signalAll()
      Wakes up all waiting threads.
    • Method Detail

      • name

        String name()
        Name of ignite condition.
        Returns:
        Name of ignite condition.
      • await

        void await()
            throws IgniteInterruptedException,
                   IgniteException
        Causes the current thread to wait until it is signalled or interrupted.

        The lock associated with this IgniteCondition is atomically released and the current thread becomes disabled for thread scheduling purposes and lies dormant until one of six things happens:

        • Some other thread (on any node) invokes the signal() method for this Condition and the current thread happens to be chosen as the thread to be awakened; or
        • Some other thread (on any node) invokes the signalAll() method for this Condition; or
        • Some other thread interrupts the current thread, and interruption of thread suspension is supported; or
        • Some other node in grid fails, and lock is created in non-failoverSafe mode; or
        • Local node is stopped; or
        • A "spurious wakeup" occurs.

        If lock is not broken (because of failure of lock owner node) in non-failoverSafe mode and local node is alive, before this method can return the current thread must re-acquire the lock associated with this condition. In all other cases when the thread returns it is guaranteed to hold this lock.

        If the current thread:

        • has its interrupted status set on entry to this method; or
        • is interrupted while waiting and interruption of thread suspension is supported,
        then IgniteInterruptedException is thrown and the current thread's interrupted status is cleared. It is not specified, in the first case, whether or not the test for interruption occurs before the lock is released.

        Implementation Considerations

        The current thread is assumed to hold the lock associated with this Condition when this method is called. If not, an IllegalMonitorStateException will be thrown.

        Specified by:
        await in interface Condition
        Throws:
        IgniteInterruptedException - if the current thread is interrupted
        IgniteException - if the node stopped, or node owning the lock failed in non-failoversafe mode
      • awaitUninterruptibly

        void awaitUninterruptibly()
                           throws IgniteException
        Causes the current thread to wait until it is signalled.

        The lock associated with this condition is atomically released and the current thread becomes disabled for thread scheduling purposes and lies dormant until one of five things happens:

        • Some other thread invokes the signal() method for this Condition and the current thread happens to be chosen as the thread to be awakened; or
        • Some other thread invokes the signalAll() method for this Condition; or
        • Some other node in grid fails, and lock is created in non-failoverSafe mode; or
        • Local node is stopped; or
        • A "spurious wakeup" occurs.

        If lock is not broken (because of failure of lock owner node) in non-failoverSafe mode and local node is alive, before this method can return the current thread must re-acquire the lock associated with this condition. In all other cases, when the thread returns it is guaranteed to hold this lock.

        If the current thread's interrupted status is set when it enters this method, or it is interrupted while waiting, it will continue to wait until signalled. When it finally returns from this method its interrupted status will still be set.

        Implementation Considerations

        The current thread is assumed to hold the lock associated with this Condition when this method is called. If not, an IllegalMonitorStateException will be thrown.

        Specified by:
        awaitUninterruptibly in interface Condition
        Throws:
        IgniteException - if the node stopped, or node owning the lock failed in non-failoversafe mode
      • awaitNanos

        long awaitNanos​(long nanosTimeout)
                 throws IgniteInterruptedException,
                        IgniteException
        Causes the current thread to wait until it is signalled or interrupted, or the specified waiting time elapses.

        The lock associated with this condition is atomically released and the current thread becomes disabled for thread scheduling purposes and lies dormant until one of seven things happens:

        • Some other thread invokes the signal() method for this Condition and the current thread happens to be chosen as the thread to be awakened; or
        • Some other thread invokes the signalAll() method for this Condition; or
        • Some other thread interrupts the current thread, and interruption of thread suspension is supported; or
        • The specified waiting time elapses; or
        • Some other node in grid fails, and lock is created in non-failoverSafe mode; or
        • Local node is stopped; or
        • A "spurious wakeup" occurs.

        If lock is not broken (because of failure of lock owner node) in non-failoverSafe mode and local node is alive, before this method can return the current thread must re-acquire the lock associated with this condition. When the thread returns it is guaranteed to hold this lock.

        If the current thread:

        • has its interrupted status set on entry to this method; or
        • is interrupted while waiting and interruption of thread suspension is supported,
        then IgniteInterruptedException is thrown and the current thread's interrupted status is cleared. It is not specified, in the first case, whether or not the test for interruption occurs before the lock is released.

        The method returns an estimate of the number of nanoseconds remaining to wait given the supplied nanosTimeout value upon return, or a value less than or equal to zero if it timed out. This value can be used to determine whether and how long to re-wait in cases where the wait returns but an awaited condition still does not hold. Typical uses of this method take the following form:

         
         boolean aMethod(long timeout, TimeUnit unit) {
           long nanos = unit.toNanos(timeout);
           lock.lock();
           try {
             while (!conditionBeingWaitedFor()) {
               if (nanos <= 0L)
                 return false;
               nanos = theCondition.awaitNanos(nanos);
             }
             // ...
           } finally {
             lock.unlock();
           }
         }

        Design note: This method requires a nanosecond argument so as to avoid truncation errors in reporting remaining times. Such precision loss would make it difficult for programmers to ensure that total waiting times are not systematically shorter than specified when re-waits occur.

        Implementation Considerations

        The current thread is assumed to hold the lock associated with this Condition when this method is called. If not, an IllegalMonitorStateException will be thrown.

        Specified by:
        awaitNanos in interface Condition
        Parameters:
        nanosTimeout - the maximum time to wait, in nanoseconds
        Returns:
        an estimate of the nanosTimeout value minus the time spent waiting upon return from this method. A positive value may be used as the argument to a subsequent call to this method to finish waiting out the desired time. A value less than or equal to zero indicates that no time remains.
        Throws:
        IgniteInterruptedException - if the current thread is interrupted
        IgniteException - if the node stopped, or node owning the lock failed in non-failoversafe mode
      • await

        boolean await​(long time,
                      TimeUnit unit)
               throws IgniteInterruptedException,
                      IgniteException
        Causes the current thread to wait until it is signalled or interrupted, or the specified waiting time elapses. This method is behaviorally equivalent to:
         awaitNanos(unit.toNanos(time)) > 0
        Specified by:
        await in interface Condition
        Parameters:
        time - the maximum time to wait
        unit - the time unit of the time argument
        Returns:
        false if the waiting time detectably elapsed before return from the method, else true
        Throws:
        IgniteInterruptedException - if the current thread is interrupted
        IgniteException - if the node stopped, or node owning the lock failed in non-failoversafe mode
      • awaitUntil

        boolean awaitUntil​(Date deadline)
                    throws IgniteInterruptedException,
                           IgniteException
        Causes the current thread to wait until it is signalled or interrupted, or the specified deadline elapses.

        The lock associated with this condition is atomically released and the current thread becomes disabled for thread scheduling purposes and lies dormant until one of seven things happens:

        • Some other thread invokes the signal() method for this Condition and the current thread happens to be chosen as the thread to be awakened; or
        • Some other thread invokes the signalAll() method for this Condition; or
        • Some other thread interrupts the current thread, and interruption of thread suspension is supported; or
        • Some other node in grid fails, and lock is created in non-failoverSafe mode; or
        • Local node is stopped; or
        • The specified deadline elapses; or
        • A "spurious wakeup" occurs.

        If lock is not broken (because of failure of lock owner node) in non-failoverSafe mode and local node is alive, before this method can return the current thread must re-acquire the lock associated with this condition. When the thread returns it is guaranteed to hold this lock.

        If the current thread:

        • has its interrupted status set on entry to this method; or
        • is interrupted while waiting and interruption of thread suspension is supported,
        then IgniteInterruptedException is thrown and the current thread's interrupted status is cleared. It is not specified, in the first case, whether or not the test for interruption occurs before the lock is released.

        The return value indicates whether the deadline has elapsed, which can be used as follows:

         
         boolean aMethod(Date deadline) {
           boolean stillWaiting = true;
           lock.lock();
           try {
             while (!conditionBeingWaitedFor()) {
               if (!stillWaiting)
                 return false;
               stillWaiting = theCondition.awaitUntil(deadline);
             }
             // ...
           } finally {
             lock.unlock();
           }
         }

        Implementation Considerations

        The current thread is assumed to hold the lock associated with this Condition when this method is called. If not, an IllegalMonitorStateException will be thrown.

        Specified by:
        awaitUntil in interface Condition
        Parameters:
        deadline - the absolute time to wait until
        Returns:
        false if the deadline has elapsed upon return, else true
        Throws:
        IgniteInterruptedException - if the current thread is interrupted (and interruption of thread suspension is supported)
        IgniteException - if the node stopped, or node owning the lock failed in non-failoversafe mode
      • signal

        void signal()
             throws IgniteException
        Wakes up one waiting thread.

        If any threads are waiting on this condition then one is selected for waking up. That thread must then re-acquire the lock before returning from await.

        Implementation Considerations

        The current thread is assumed to hold the lock associated with this Condition when this method is called. If not, an IllegalMonitorStateException will be thrown.

        Specified by:
        signal in interface Condition
        Throws:
        IgniteException - if node is stopped or node owning the lock failed in non-failoversafe mode
      • signalAll

        void signalAll()
                throws IgniteException
        Wakes up all waiting threads.

        If any threads are waiting on this condition then they are all woken up. Each thread must re-acquire the lock before it can return from await.

        Implementation Considerations

        The current thread is assumed to hold the lock associated with this Condition when this method is called. If not, an IllegalMonitorStateException will be thrown.

        Specified by:
        signalAll in interface Condition
        Throws:
        IgniteException - if node is stopped or node owning the lock failed in non-failoversafe mode