Class BlockingCell<T>

java.lang.Object
com.rabbitmq.utility.BlockingCell<T>
Direct Known Subclasses:
BlockingValueOrException

public class BlockingCell<T> extends Object
Simple one-shot IPC mechanism. Essentially a one-place buffer that cannot be emptied once filled.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Instantiate a new BlockingCell waiting for a value of the specified type.
  • Method Summary

    Modifier and Type
    Method
    Description
    get()
    Wait for a value, and when one arrives, return it (without clearing it).
    get(long timeout)
    Wait for a value, and when one arrives, return it (without clearing it).
    void
    set(T newValue)
    Store a value in this BlockingCell, throwing IllegalStateException if the cell already has a value.
    boolean
    setIfUnset(T newValue)
    Store a value in this BlockingCell if it doesn't already have a value.
    As get(), but catches and ignores InterruptedException, retrying until a value appears.
    uninterruptibleGet(int timeout)
    As get(long timeout), but catches and ignores InterruptedException, retrying until a value appears or until specified timeout is reached.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • BlockingCell

      public BlockingCell()
      Instantiate a new BlockingCell waiting for a value of the specified type.
  • Method Details

    • get

      public T get() throws InterruptedException
      Wait for a value, and when one arrives, return it (without clearing it). If there's already a value present, there's no need to wait - the existing value is returned.
      Returns:
      the waited-for value
      Throws:
      InterruptedException - if this thread is interrupted
    • get

      public T get(long timeout) throws InterruptedException, TimeoutException
      Wait for a value, and when one arrives, return it (without clearing it). If there's already a value present, there's no need to wait - the existing value is returned. If timeout is reached and value hasn't arrived, TimeoutException is thrown.
      Parameters:
      timeout - timeout in milliseconds. -1 effectively means infinity
      Returns:
      the waited-for value
      Throws:
      InterruptedException - if this thread is interrupted
      TimeoutException
    • uninterruptibleGet

      public T uninterruptibleGet()
      As get(), but catches and ignores InterruptedException, retrying until a value appears.
      Returns:
      the waited-for value
    • uninterruptibleGet

      public T uninterruptibleGet(int timeout) throws TimeoutException
      As get(long timeout), but catches and ignores InterruptedException, retrying until a value appears or until specified timeout is reached. If timeout is reached, TimeoutException is thrown. We also use System.nanoTime() to behave correctly when system clock jumps around.
      Parameters:
      timeout - timeout in milliseconds. -1 means 'infinity': never time out
      Returns:
      the waited-for value
      Throws:
      TimeoutException
    • set

      public void set(T newValue)
      Store a value in this BlockingCell, throwing IllegalStateException if the cell already has a value.
      Parameters:
      newValue - the new value to store
    • setIfUnset

      public boolean setIfUnset(T newValue)
      Store a value in this BlockingCell if it doesn't already have a value.
      Parameters:
      newValue - the new value to store
      Returns:
      true if this call to setIfUnset actually updated the BlockingCell; false if the cell already had a value.