我正在使用中断器在线程之间发送消息。我想使用单模式,因为它更快。但是在生产过程中会有阻塞操作。我希望在多个线程中运行此阻塞操作。我该如何设计?
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();
}
});
}
这些代码可以正确运行吗?