Ich bin auf der Suche nach einigen gleichzeitigen Code zu schreiben, die ein Ereignis verarbeiten wird. Diese Verarbeitung kann eine lange Zeit dauern.
Während dieses Ereignis verarbeitet wird, sollte es eingehende Ereignisse aufzeichnen und dann die letzten eingehenden Ereignisse verarbeiten, wenn es wieder laufen kann. (Die anderen Ereignisse können weggeworfen werden). Dies ist ein wenig wie eine FILO-Warteschlange, aber ich muss nur ein Element in der Warteschlange speichern.
Im Idealfall möchte ich meinen neuen Executor in meine unten dargestellte Ereignisverarbeitungsarchitektur einbinden.
public class AsyncNode<I, O> extends AbstractNode<I, O> {
private static final Logger log = LoggerFactory.getLogger(AsyncNode.class);
private Executor executor;
public AsyncNode(EventHandler<I, O> handler, Executor executor) {
super(handler);
this.executor = executor;
}
@Override
public void emit(O output) {
if (output != null) {
for (EventListener<O> node : children) {
node.handle(output);
}
}
}
@Override
public void handle(final I input) {
executor.execute(new Runnable() {
@Override
public void run() {
try{
emit(handler.process(input));
}catch (Exception e){
log.error("Exception occured whilst processing input." ,e);
throw e;
}
}
});
}
}