java - 事件总线 Guava 有一个无界队列

标签 java events garbage-collection guava

我害怕使用事件总线 http://code.google.com/p/guava-libraries/wiki/EventBusExplained因为我认为它在内部使用无界队列。如果有很多消息发布到它。它可能会遇到完整的 gc。

是否存在一个类似的实现,它做同样的事情是无界队列?

最佳答案

事实上,Guava 使用了一个 ConcurrentLinkedQueue ,这是无界的:

An unbounded thread-safe queue based on linked nodes.

参见 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

关于java - 事件总线 Guava 有一个无界队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12362123/

相关文章:

javascript - 如何监听 Ajax 触发元素上的 Ajax 事件?

Python threading.Event() - 确保所有等待的线程在 event.set() 上唤醒

java - gc.log写入是异步的吗?将 gc.log 放在 NFS 挂载上安全吗?

javascript - 具有内存泄漏的 React 组件

java - 如何指示 JComboBox 正在加载值?

java - 使用非常旧的 JDBC 1.0 驱动程序的 Spring Batch

java - 构造函数 XMLSlideShow(FileInputStream) 未定义

javascript - 在崩溃之前检测浏览器中的内存耗尽

Java Eclipse(android)无法将数据插入mongodb数据库

java - 当 Activity 在其 AsyncTask 运行时被销毁时,内存中会发生什么?