Package eu.bandm.tools.message
Class MessageAsync<M extends Message>
- java.lang.Object
-
- eu.bandm.tools.message.SingleSender<M>
-
- eu.bandm.tools.message.MessageAsync<M>
-
- All Implemented Interfaces:
MessageReceiver<M>
public class MessageAsync<M extends Message> extends SingleSender<M> implements MessageReceiver<M>
A sub-class ofSingleSender
which lets the drain's receive method run asynchronouously in a separate thread.
All received messages are stored internally in a buffer, and theMessageReceiver.receive(Message)
method of the currently setSingelSender#receiver
is executed in a loop in an own, specially constructedThread
, consuming all these messages asynchronouously.
The caller of the here definedreceive(Message)
thus returns immediately, after writing the message into a buffer object. (This is currently aLinkedBlockingQueue
.)
-
-
Field Summary
Fields Modifier and Type Field Description (package private) boolean
interrupted
(package private) java.util.concurrent.LinkedBlockingQueue<M>
queue
(package private) java.lang.Thread
thread
-
Fields inherited from class eu.bandm.tools.message.SingleSender
receiver
-
-
Constructor Summary
Constructors Constructor Description MessageAsync()
After calling this constructor, a call toSingleSender.setReceiver(MessageReceiver)
is necessary beforeSingleSender.send(Message)
can be used.MessageAsync(MessageReceiver<? super M> r)
Constructor which sets the receiver.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
receive(M m)
Returns immediately after storing the message to the internal buffer.-
Methods inherited from class eu.bandm.tools.message.SingleSender
getReceiver, send, setReceiver
-
-
-
-
Constructor Detail
-
MessageAsync
public MessageAsync()
After calling this constructor, a call toSingleSender.setReceiver(MessageReceiver)
is necessary beforeSingleSender.send(Message)
can be used. Otherwise code will crash intentionally. Cf the documentation ofthe super constructor
.
-
MessageAsync
public MessageAsync(MessageReceiver<? super M> r)
Constructor which sets the receiver.
-
-
Method Detail
-
receive
public void receive(M m)
Returns immediately after storing the message to the internal buffer.
Will block whenever this buffer is full. Normally this should never happen, since the consumer thread should not "starve" under normal scheduling discipline.
Overrun is probably some kamikaze problem with the producer, since the buffer has a capacity ofInteger.MAX_VALUE
messages.- Specified by:
receive
in interfaceMessageReceiver<M extends Message>
-
-