0

我对 Guava EventBus 的工作原理有疑问。我的对象已注册到 EventBus。在 10 秒的时间间隔内,消息被发送给他们,处理完成后,我将对象中的一些变量与单例值进行比较。根据某些标准,我更改了单例值。我在 Guava 文档中进行了一些研究,但没有找到任何有关同步问题的信息。

这是正确的方法吗?

带着敬意

4

2 回答 2

2

只要您使用EventBus(而不是),总线就不会添加AsyncEventBus同步问题。事件总线只是在同一个线程中立即执行您的订阅者。

只要您自己坚持使用单线程,就没有多线程,也不需要任何同步。

于 2014-08-15T21:34:46.560 回答
1

EventBus 是为并发使用而构建的

来自EventBus 源代码,第 91 行:

这个类对于并发使用是安全的。

我也担心并发,因为文档没有提及。仔细阅读源代码后,看到这条评论加上并发集合的使用消除了我的担忧。

volatile

关于问题提到的比较单例跨线程变化的值,您可能需要使用volatile关键字来保护访问,以保证当前值的可见性,而不是缓存在处理器内核中的旧值。但这是一个常规的并发问题,与 EventBus 的使用无关。

于 2015-01-03T07:02:19.227 回答