Package com.rabbitmq.utility
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 BlockingCell()
Instantiate a new BlockingCell waiting for a value of the specified type.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description T
get()
Wait for a value, and when one arrives, return it (without clearing it).T
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 AssertionError 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.T
uninterruptibleGet()
As get(), but catches and ignores InterruptedException, retrying until a value appears.T
uninterruptibleGet(int timeout)
As get(long timeout), but catches and ignores InterruptedException, retrying until a value appears or until specified timeout is reached.
-
-
-
Method Detail
-
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 interruptedTimeoutException
-
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 AssertionError 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.
-
-