Package com.rabbitmq.utility
Class BlockingCell<T>
java.lang.Object
com.rabbitmq.utility.BlockingCell<T>
- Direct Known Subclasses:
BlockingValueOrException
Simple one-shot IPC mechanism. Essentially a one-place buffer that cannot be emptied once filled.
-
Constructor Summary
ConstructorDescriptionInstantiate a new BlockingCell waiting for a value of the specified type. -
Method Summary
Modifier and TypeMethodDescriptionget()
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
Store a value in this BlockingCell, throwingIllegalStateException
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.
-
Constructor Details
-
BlockingCell
public BlockingCell()Instantiate a new BlockingCell waiting for a value of the specified type.
-
-
Method Details
-
get
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
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
As get(), but catches and ignores InterruptedException, retrying until a value appears.- Returns:
- the waited-for value
-
uninterruptibleGet
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
Store a value in this BlockingCell, throwingIllegalStateException
if the cell already has a value.- Parameters:
newValue
- the new value to store
-
setIfUnset
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.
-