我不敢使用事件总线http://code.google.com/p/guava-libraries/wiki/EventBusExplained,因为我认为其内部使用了无限制队列。如果有很多消息发布到它。它可能会遇到完整的gc。
是否有一个类似的实现与无界队列相同?
最佳答案
确实,番石榴使用了一个ConcurrentLinkedQueue
,它是不受限制的:
基于链接节点的无界线程安全队列。
请参见line 151-158 of EventBus.java。
/** queues of events for the current thread to dispatch */
private final ThreadLocal<ConcurrentLinkedQueue<EventWithHandler>>
eventsToDispatch =
new ThreadLocal<ConcurrentLinkedQueue<EventWithHandler>>() {
@Override protected ConcurrentLinkedQueue<EventWithHandler> initialValue() {
return new ConcurrentLinkedQueue<EventWithHandler>();
}
};
您可以随时修改代码以使用例如
ArrayBlockingQueue
。您是否研究过其他类似的解决方案,例如disruptor?