Package io.servicetalk.concurrent.api
Interface BlockingProcessorSignalsHolder<T>
-
- Type Parameters:
T
- Type of items stored in this holder.
public interface BlockingProcessorSignalsHolder<T>
A holder of items for aBlockingIterable.Processor
.Multi-threaded access
Implementations may assume that the consumption of the items (methodsconsume(ProcessorSignalsConsumer)
andconsume(ProcessorSignalsConsumer, long, TimeUnit)
) is always done serially however the production (methodsadd(Object)
,terminate(Throwable)
andterminate()
) may be done concurrently.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
add(T item)
Adds an item to this holder.boolean
consume(ProcessorSignalsConsumer<T> consumer)
Consumes the next item stored in this holder.boolean
consume(ProcessorSignalsConsumer<T> consumer, long waitFor, java.util.concurrent.TimeUnit waitForUnit)
Consumes the next item stored in this holder.void
terminate()
Terminates this holder, such that no further modifications of this holder are expected.void
terminate(java.lang.Throwable cause)
Terminates this holder, such that no further modifications of this holder are expected.
-
-
-
Method Detail
-
add
void add(@Nullable T item) throws java.lang.InterruptedException
Adds an item to this holder.- Parameters:
item
- to add.- Throws:
java.lang.InterruptedException
- If the add was interrupted.
-
terminate
void terminate() throws java.lang.InterruptedException
Terminates this holder, such that no further modifications of this holder are expected. Subsequentconsumptions
must first consume all previouslyadded
items and thenProcessorSignalsConsumer.consumeTerminal()
consume termination}.- Throws:
java.lang.InterruptedException
- If termination was interrupted.
-
terminate
void terminate(java.lang.Throwable cause) throws java.lang.InterruptedException
Terminates this holder, such that no further modifications of this holder are expected. Subsequentconsumptions
must first consume all previouslyadded
items and thenProcessorSignalsConsumer.consumeTerminal()
consume termination}.- Parameters:
cause
-Throwable
as a cause for termination.- Throws:
java.lang.InterruptedException
- If termination was interrupted.
-
consume
boolean consume(ProcessorSignalsConsumer<T> consumer) throws java.lang.InterruptedException
Consumes the next item stored in this holder. If there are no items stored in the holder and the holder has terminatedsuccessfully
or with anerror
then consume thatsuccessful
orfailed
termination.This method will block till an item or a terminal event is available in the holder.
- Parameters:
consumer
-ProcessorSignalsConsumer
to consume the next item or termination in this holder- Returns:
true
if any method was called on the passedProcessorSignalsConsumer
.- Throws:
java.lang.InterruptedException
- If the thread was interrupted while waiting for an item or terminal event.
-
consume
boolean consume(ProcessorSignalsConsumer<T> consumer, long waitFor, java.util.concurrent.TimeUnit waitForUnit) throws java.util.concurrent.TimeoutException, java.lang.InterruptedException
Consumes the next item stored in this holder. If there are no items stored in the holder and the holder has terminatedsuccessfully
or with anerror
then consume thatsuccessful
orfailed
termination.This method will block till an item or a terminal event is available in the holder or the passed
waitFor
duration has elapsed.- Parameters:
consumer
-ProcessorSignalsConsumer
to consume the next item or termination in this holderwaitFor
- Duration to wait for an item or termination to be available.waitForUnit
-TimeUnit
forwaitFor
.- Returns:
true
if any method was called on the passedProcessorSignalsConsumer
.- Throws:
java.util.concurrent.TimeoutException
- If there was no item or termination available in the holder for the passedwaitFor
durationjava.lang.InterruptedException
- If the thread was interrupted while waiting for an item or terminal event.
-
-