Class EventLoop<E>

java.lang.Object
org.monte.media.concurrent.EventLoop<E>
Direct Known Subclasses:
SequentialDispatcher

public abstract class EventLoop<E> extends Object
An EventLoop can process events on a separate worker thread. It consists of two parts: the event collector and the event processor.

The event collector collects all incoming events and puts them into a queue.
The event processor removes the events from the queue and processes them.

The key feature of the EventLoop is, that clients don't have to wait until an event has been processed. Clients are free to proceed as soon as the collector has put the event into the queue.

Usage

This is an abstract class. It does all the queue handling, but does no processing. To use it, you have to create a subclass which overrides the methods #collectEvent and #processEvent.

Example

An EventLoop, which outputs Strings on a background thread could look like this:


 public class AsyncDisplay
 extends AbstractEventLoop {
     public void display(String string) {
         collectEvent(string);
     }
     protected void processEvent(Object event) {
          System.out.println((String) event);
    }
 }
 

To use the class proceed like this:


 AsyncDisplay a = new AsyncDisplay();
  a.display("Hello World");
 
Author:
Werner Randelshofer
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Thread
    The event processor thread.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a new EventLoop which processes events at Thread.NORM_PRORITY.
    EventLoop(int priority)
    Creates a new EventLoop which processes events at the desired thread priority.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Clears the event queue.
    protected void
    collectEvent(E event)
    Collects an event and puts it into the event queue for later processing.
    boolean
    Returns true if the EventLoop coalesces multiple pending events.
    void
     
    protected abstract void
    processEvent(E event)
    This method processes a single event on the event processor thread.
    protected void
    This method removes events from the event queue and proceses them until the queue is empty or until #stop is called.
    void
    setCoalesce(boolean b)
    Sets whether the EventLoop coalesces multiple pending events.
    void
    Starts the event processor.
    void
    Stops the event processor.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • eventProcessor

      protected Thread eventProcessor
      The event processor thread.
  • Constructor Details

    • EventLoop

      public EventLoop()
      Creates a new EventLoop which processes events at Thread.NORM_PRORITY.
    • EventLoop

      public EventLoop(int priority)
      Creates a new EventLoop which processes events at the desired thread priority.
      Parameters:
      priority - The Thread priority of the event processor.
  • Method Details

    • collectEvent

      protected void collectEvent(E event)
      Collects an event and puts it into the event queue for later processing.
      Parameters:
      event - The event to be put into the queue.
    • setCoalesce

      public void setCoalesce(boolean b)
      Sets whether the EventLoop coalesces multiple pending events. A busy application may not be able to keep up with event generation, causing multiple events to be queued. Coalescing is based on equality tests of event objects. More formally, coalesces an event o if and only if the queue contains at least one element e such that (o==null ? e==null : o.equals(e)).

      EventLoops do not coalesce events by default.

      Parameters:
      b - Specify true to turn on coalescing.
    • isCoalesce

      public boolean isCoalesce()
      Returns true if the EventLoop coalesces multiple pending events.
      See Also:
    • start

      public void start()
      Starts the event processor.
      The event processor is started by default.
    • stop

      public void stop()
      Stops the event processor.
    • join

      public void join() throws InterruptedException
      Throws:
      InterruptedException
    • clear

      public void clear()
      Clears the event queue.
    • processEvent

      protected abstract void processEvent(E event)
      This method processes a single event on the event processor thread.
      Parameters:
      event - An event from the queue.
    • processEvents

      protected void processEvents()
      This method removes events from the event queue and proceses them until the queue is empty or until #stop is called.

      This method must be called from the event processor thread only.