我正在尋找寫一些將處理事件的併發代碼。此處理可能需要很長時間。Executor /隊列處理最後一個已知任務只
雖然該事件正在處理,它應記錄傳入的事件,然後處理最後傳入的事件,當它可以再次運行時。 (其他事件可以扔掉)。這有點像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;
}
}
});
}
}
您是否希望此執行程序正常處理提交給它的其他任務?或者這個執行者只會被用來處理你的事件嗎? – shams
它應該始終執行最新的已知任務,並忽略已排隊但未執行的中間任務。我提出了我的解決方案,但還沒有測試過。 –
那麼這意味着執行程序一次只能主動執行一項任務,而不考慮您啓動執行程序的線程數是多少? – shams