class EventThread extends Thread {
private final LinkedBlockingQueue<Event> waitingEvents = new LinkedBlockingQueue<Event>();
private volatile boolean wasKilled = false;
EventThread() {
super("EventThread");
setDaemon(true);
}
public void queueEventOfDeath() {
waitingEvents.add(deathEvent);//自定义的终止Event,可选的
}
public void queueEvent(Event e) {
waitingEvents.add(e);
}
@Override
public void run() {
try {
while (true) {
Event event = waitingEvents.take();
if (event == deathEvent) {
wasKilled = true;
} else {
processEvent(event);
}
if (wasKilled)
synchronized (waitingEvents) {
if (waitingEvents.isEmpty()) {
break;
}
}
}
} catch (InterruptedException e) {
logger.info("Event thread exiting due to interruption" + e);
}
logger.info("EventThread shut down");
}
private void processEvent(Event e) {
//这里加入事件处理的内容。
}
public void stopEventThread(){
wasKilled=true;
}
}