public class Select<T>
extends java.lang.Object
Both 'select' and 'prioritySelect' methods come in two flavours - blocking, which wait till a value is available in a channel, and messaging, which send out a message to the specified message handler, as soon as a message is available. Optionally, all methods allow the user to specify a boolean mask, assigning each select 's input channel a flag indicating, whether it should be included in the select operation. This is useful when handling state to selectively block some inputs in some states.
Modifier and Type | Field and Description |
---|---|
private SelectBase<T> |
selectBase |
static java.lang.String |
TIMEOUT
A value that gets bound to timeout channels through the Select.createTimeout() method
|
Constructor and Description |
---|
Select(PGroup pGroup,
java.util.List<SelectableChannel<? extends T>> channels) |
Select(PGroup pGroup,
SelectableChannel<? extends T>... channels) |
Modifier and Type | Method and Description |
---|---|
SelectResult<T> |
call()
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
SelectResult<T> |
call(java.util.List<java.lang.Boolean> mask)
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
void |
call(MessageStream messageStream)
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
void |
call(MessageStream messageStream,
java.util.List<java.lang.Boolean> mask)
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
static DataflowReadChannel<java.lang.String> |
createTimeout(long timeout)
Creates a timeout channel (DataflowVariable) that will bind a Select.TIMEOUT value after the specified timeout.
|
SelectResult<T> |
prioritySelect()
Selects a value from a single input channel, which has a value available for read.
|
SelectResult<T> |
prioritySelect(java.util.List<java.lang.Boolean> mask)
Selects a value from a single input channel, which has a value available for read.
|
void |
prioritySelect(MessageStream messageStream)
Selects a value from a single input channel, which has a value available for read.
|
void |
prioritySelect(MessageStream messageStream,
java.util.List<java.lang.Boolean> mask)
Selects a value from a single input channel, which has a value available for read.
|
Promise<SelectResult<T>> |
prioritySelectToPromise()
Selects asynchronously a value from a single input channel, which has a value available for read.
|
Promise<SelectResult<T>> |
prioritySelectToPromise(java.util.List<java.lang.Boolean> mask)
Selects asynchronously a value from a single input channel, which has a value available for read.
|
SelectResult<T> |
select()
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
private SelectResult<T> |
select(int startIndex,
java.util.List<java.lang.Boolean> mask)
Invokes the internal select base with a SelectRequest instance ensuring the current thread can continue returning the correct value, once a value has been selected
|
SelectResult<T> |
select(java.util.List<java.lang.Boolean> mask)
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
void |
select(MessageStream messageStream)
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
private void |
select(MessageStream messageStream,
int startIndex,
java.util.List<java.lang.Boolean> mask)
Invokes the internal select base with a SelectRequest instance ensuring a message is sent, once a value has been selected
|
void |
select(MessageStream messageStream,
java.util.List<java.lang.Boolean> mask)
Selects a value from a single randomly chosen input channel, which has a value available for read.
|
Promise<SelectResult<T>> |
selectToPromise()
Selects asynchronously a value from a single randomly chosen input channel, which has a value available for read.
|
private Promise<SelectResult<T>> |
selectToPromise(int startIndex,
java.util.List<java.lang.Boolean> mask)
Invokes the internal select base with a SelectRequest instance ensuring a message is sent, once a value has been selected
|
Promise<SelectResult<T>> |
selectToPromise(java.util.List<java.lang.Boolean> mask)
/**
Selects asynchronously a value from a single randomly chosen input channel, which has a value available for read.
|
private final SelectBase<T> selectBase
public static final java.lang.String TIMEOUT
public Select(PGroup pGroup, SelectableChannel<? extends T>... channels)
pGroup
- The group, the thread pool of which should be used for notification message handlerschannels
- The input channels to select frompublic Select(PGroup pGroup, java.util.List<SelectableChannel<? extends T>> channels)
pGroup
- The group, the thread pool of which should be used for notification message handlerschannels
- The list of input channels to select frompublic SelectResult<T> select() throws java.lang.InterruptedException
java.lang.InterruptedException
- If the current thread gets interruptedpublic SelectResult<T> select(java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedpublic static DataflowReadChannel<java.lang.String> createTimeout(long timeout)
timeout
- The delay in milliseconds to wait before the value gets boundpublic void select(MessageStream messageStream) throws java.lang.InterruptedException
messageStream
- A message stream accepting the selected value. The message will be of SelectResult type, holding the actual value as well as the channel index.java.lang.InterruptedException
- If the current thread gets interruptedpublic void select(MessageStream messageStream, java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
messageStream
- A message stream accepting the selected value. The message will be of SelectResult type, holding the actual value as well as the channel index.mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedpublic Promise<SelectResult<T>> selectToPromise() throws java.lang.InterruptedException
java.lang.InterruptedException
- If the current thread gets interruptedpublic Promise<SelectResult<T>> selectToPromise(java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedpublic SelectResult<T> prioritySelect() throws java.lang.InterruptedException
java.lang.InterruptedException
- If the current thread gets interruptedpublic SelectResult<T> prioritySelect(java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedpublic void prioritySelect(MessageStream messageStream) throws java.lang.InterruptedException
messageStream
- A message stream accepting the selected value. The message will be of SelectResult type, holding the actual value as well as the channel index.java.lang.InterruptedException
- If the current thread gets interruptedpublic void prioritySelect(MessageStream messageStream, java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
messageStream
- A message stream accepting the selected value. The message will be of SelectResult type, holding the actual value as well as the channel index.mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedpublic Promise<SelectResult<T>> prioritySelectToPromise() throws java.lang.InterruptedException
java.lang.InterruptedException
- If the current thread gets interruptedpublic Promise<SelectResult<T>> prioritySelectToPromise(java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedpublic final SelectResult<T> call() throws java.lang.InterruptedException
java.lang.InterruptedException
- If the current thread gets interruptedpublic final SelectResult<T> call(java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedpublic final void call(MessageStream messageStream) throws java.lang.InterruptedException
messageStream
- A message stream accepting the selected value. The message will be of SelectResult type, holding the actual value as well as the channel index.java.lang.InterruptedException
- If the current thread gets interruptedpublic final void call(MessageStream messageStream, java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
messageStream
- A message stream accepting the selected value. The message will be of SelectResult type, holding the actual value as well as the channel index.mask
- A list of boolean values indicating, whether the input channel with the same position index should be included in the selection or notjava.lang.InterruptedException
- If the current thread gets interruptedprivate Promise<SelectResult<T>> selectToPromise(int startIndex, java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
java.lang.InterruptedException
private void select(MessageStream messageStream, int startIndex, java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
java.lang.InterruptedException
private SelectResult<T> select(int startIndex, java.util.List<java.lang.Boolean> mask) throws java.lang.InterruptedException
java.lang.InterruptedException