public abstract class EventLoop
extends java.lang.Object
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");
Modifier and Type | Field and Description |
---|---|
protected java.lang.Thread |
eventProcessor
The event processor thread.
|
Constructor and Description |
---|
EventLoop()
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.
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
Clears the event queue.
|
protected void |
collectEvent(java.lang.Object event)
Collects an event and puts it into the event queue
for later processing.
|
boolean |
isCoalesce()
Returns true if the EventLoop
coalesces multiple pending events.
|
void |
join() |
protected abstract void |
processEvent(java.lang.Object event)
This method processes a single event on the event processor thread.
|
protected void |
processEvents()
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 |
start()
Starts the event processor.
|
void |
stop()
Stops the event processor.
|
public EventLoop()
public EventLoop(int priority)
priority
- The Thread priority of the event processor.protected void collectEvent(java.lang.Object event)
event
- The event to be put into the queue.public void setCoalesce(boolean b)
(o==null ? e==null : o.equals(e))
.
EventLoops do not coalesce events by default.
b
- Specify true to turn on coalescing.public boolean isCoalesce()
setCoalesce(boolean)
public void start()
public void stop()
public void join() throws java.lang.InterruptedException
java.lang.InterruptedException
public void clear()
protected abstract void processEvent(java.lang.Object event)
event
- An event from the queue.protected void processEvents()
This method must be called from the event processor thread only.