我正在寻找一些将处理事件的并发代码。此处理可能需要很长时间。
当该事件正在处理时,它应该记录传入事件,然后在它可以再次自由运行时处理最后传入的事件。(可以丢弃其他事件)。这有点像 FILO 队列,但我只需要在队列中存储一个元素。
理想情况下,我想将我的新 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;
}
}
});
}
}