イベントを処理する並行コードを書きたいと思っています。この処理には時間がかかる場合があります。
そのイベントが処理されている間、受信イベントを記録し、再び自由に実行できるようになったときに最後の受信イベントを処理する必要があります。(他のイベントは破棄できます)。これは FILO キューに少し似ていますが、キューに 1 つの要素を格納するだけで済みます。
理想的には、新しい Executor を以下に示すイベント処理アーキテクチャにプラグインしたいと考えています。
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;
}
}
});
}
}