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>, AutoCloseable

public class MessageAsync<M extends Message> extends SingleSender<M> implements MessageReceiver<M>, AutoCloseable
A sub-class of SingleSender which lets the drain's receive method run asynchronouously in a separate thread.

All received messages are stored internally in a buffer, and the MessageReceiver.receive(Message) method of the currently set SingleSender.receiver is executed in a loop in an own, specially constructed Thread, consuming all these messages asynchronouously.
The caller of the here defined receive(Message) thus returns immediately, after writing the message into a buffer object. (This is currently a LinkedBlockingQueue.)

  • Field Details

    • queue

      final LinkedBlockingQueue<M extends Message> queue
      Bufferfor the written messages, waiting to be delivered asynchronouously to the receiver.
    • interrupted

      boolean interrupted
      Flag which reflects the state of the thread.
    • running

      boolean running
      Flag which reflects the state of the thread.
    • thread

      final Thread thread
      Thread which reads the buffer queue and sends it contents asynchronouously tho the receiver SingleSender.receiver.
  • Constructor Details

  • Method Details

    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
    • 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 of Integer.MAX_VALUE messages.

      Specified by:
      receive in interface MessageReceiver<M extends Message>
      Parameters:
      m - the message to receive.