我是打扰者的新手,我正在使用打扰者在类似管道的结构中的线程之间传递。我可以使用hadleEventsWith或使用after()如下运行一组处理程序。
disruptor.handleEventsWith(eventhandler1)
.then(eventhandler2)
.then(eventhandler3);
但是,我希望能够在此管道中添加新的EventHandlers而不更改代码。为此,我向每个事件处理程序添加一个整数值。然后,我将这些值和相关的处理程序创建为有序处理程序列表。然后,为了命令破坏者,我目前正在做的是
disruptor.handleEventsWith(handlerOrderList.get(0));
for (int i=1; i<handlerOrderList.size();i++) {
disruptor.after(handlerOrderList.get(i1)).then(handlerOrderList.get(i));
}
有什么更好的方法吗?
最佳答案
像这样的东西可能更具可读性:
EventHandler<YourTypeHere>[] handlers = getOrderedHandlersAsArray();
disruptor.handleEventsWith(handlers);
更新:
你是对的。在上述情况下,处理程序将并行处理事件。要顺序处理事件,您可以尝试以下操作:
EventHandlerGroup<T> eventHandlerGroup = null;
for (T handler : handlers) {
if (eventHandlerGroup == null) {
eventHandlerGroup = disruptor.handleEventsWith(handler);
} else {
eventHandlerGroup.then(handler);
}
}
关于java - 干扰者:设置EventHandler顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40523132/