Class EventLoop<E>
- Direct Known Subclasses:
SequentialDispatcher
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 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Clears the event queue.protected voidcollectEvent(E event) Collects an event and puts it into the event queue for later processing.booleanReturns true if the EventLoop coalesces multiple pending events.voidjoin()protected abstract voidprocessEvent(E event) This method processes a single event on the event processor thread.protected voidThis method removes events from the event queue and proceses them until the queue is empty or until #stop is called.voidsetCoalesce(boolean b) Sets whether the EventLoop coalesces multiple pending events.voidstart()Starts the event processor.voidstop()Stops the event processor.
-
Field Details
-
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
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
- Throws:
InterruptedException
-
clear
public void clear()Clears the event queue. -
processEvent
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.
-