이벤트를 처리 할 동시 코드를 작성하려고합니다. 이 처리에는 오랜 시간이 걸릴 수 있습니다.Executor/Queue 프로세스가 마지막으로 알려진 작업 만
이벤트가 처리되는 동안 들어오는 이벤트를 기록한 다음 다시 실행하도록 요청할 때 마지막 들어오는 이벤트를 처리해야합니다. (다른 이벤트는 버려 질 수 있습니다.) 이것은 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