我管理一组客户端提供的事件接收器,每个接收器都订阅自己的事件流。每个接收器通常会将数据推送到自己的网络管道中,这意味着将事件推送到接收器时存在可利用的并发性。同时我需要确保正确的事件排序。这是一种天真的方法:
final Set<Sink> sinks = new HashSet<>();
final ExecutorService pool = Executors.newCachedThreadPool();
eventSource.addListener(new SourceListener() {
public void sourceEvent(final Event event) {
final Sink sink = resolveSink(sinks, event);
pool.submit(new Runnable() { public void run() { sink.accept(event); }});
}});
这不能保证正确订购。如果我的线程池将每个事件队列与单个线程相关联并将我的接受事件任务分派到该特定线程的任务队列,这将是健壮的。我正在寻找一个基本想法或可行方法的草图。