2013-11-22 15:43 "@tecentID9347F"的内容
如果并发量比较少,disruptor 的优势没有启用多个线程去跑任务消耗的时间快! ...

呵呵,你没有仔细看我推荐给你的文章,多个线程跑任务如果写同一个资源,有争夺,必须用锁或乐观锁等堵塞方法,所以,无论并发多少,当然还是非堵塞的单线程写比多线程写快了(特别是多核情况,一个线程一个CPU,其他CPU并行运行其他线程的概率就大很多),性能体现在吞吐量和延迟两个指标上,都要好,否则Node.js那么热不是没有原因。
[该贴被banq于2013-11-22 16:09修改过]

英文网站的帮助文档说得很清楚了,如果要多个消费者,只有一个来处理一个事件,则给每个消费者线程一个序列号,当消费时,判断是否是自己的菜即可。

private final long ordinal; //当前消费线程的编号,需要指定
private final long numberOfConsumers; //总共多少个消费者

if ((sequence % numberOfConsumers) == ordinal) {
//这是我的菜,开始业务处理

只需要一个EventHandler,在EventHandler中构建自己的线程组,
然后将Event丢到线程组中消费,就可以实现多线程消费Event了。
不知道是否符合楼主需求。

感觉那么多人的回复都没理解楼主的意思啊... 
假设Event数据是手机号码,SMSEventHandler中的逻辑就是给手机号码发短信, 
生产者生产了10000个手机号, 楼主想要通过new出2多个SMSEventHandler去并行的消费短信,但是结果确实每个手机发送了2次. 
disruptor.handleWith(new SMSEventHandler(), new SMSEventHandler()) 这种结果会让这10000个手机每个都发了2次短信!!!!

楼主想的是多个EventHandler一起去抢数据消费!! 这种场景不要用EventHanler
Disruptor提供了WorkPool和WorkerHandler<T>的,你就不要实现EventHandler了, 而是去实现WorkerHandler
WorkerHandler<T> handlers = new WorkHandler[16];
然后传进去
public final EventHandlerGroup<T> handleEventsWithWorkerPool(final WorkHandler<T>... workHandlers)
那么 将会有16个消费者线程去消费这10000条短信!

 

消费者不要实现EventHandler 而是去实现WorkHandler
然后new一个WorkerHandler数组
disruptor支持WorkPool的
handleEventsWithWorkerPool(final WorkHandler<T>... workHandlers)