我不敢使用事件总线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

10-06 03:23