处于单一模式时,Disruptor可以使用多线程来生成消息吗?

时间:2019-04-22 14:03:10

标签: java

我正在使用中断器在线程之间发送消息。我想使用单模式,因为它更快。但是在生产过程中会有阻塞操作。我希望在多个线程中运行此阻塞操作。我该如何设计?

disruptor = new Disruptor<>(new EventFactory<MsgContent>() {
           @Override
           public MsgContent newInstance() {
               return new MsgContent();
           }
       }, bufferSize, new CustomThreadFactory("DISRUPTOR"),ProducerType.SINGLE,new YieldingWaitStrategy());

       MsgHanlder[] handlers = new MsgHanlder[bufferSize];
       for (int i = 0; i < handlers.length; i++) {
           handlers[i] =  new MsgHanlder<>(this);
       }

       disruptor.handleEventsWithWorkerPool(handlers);
       final RingBuffer<MsgContent> ringBuffer = disruptor.start();

       final MsgProducerWithTranslator product = new MsgProducerWithTranslator(ringBuffer);

       for (int i = 0; i < THREADNUM; i++) {
           es.execute(new Runnable() {
               @Override
               public void run() {
                   while (runFlag) {
                       try {
                           // block here
                           T msg = receiver.receiveBlockMsg(channelName);
                           if (msg != null) {
                               product.onData(msg);
                           }
                       } catch (Exception ex) {
                           log.error("", ex);
                       }
                   }
                   cdl.countDown();
               }
           });
       }

这些代码可以正确运行吗?

0 个答案:

没有答案