我对 Guava EventBus 的工作原理有疑问。我的对象已注册到 EventBus。在 10 秒的时间间隔内,消息被发送给他们,处理完成后,我将对象中的一些变量与单例值进行比较。根据某些标准,我更改了单例值。我在 Guava 文档中进行了一些研究,但没有找到任何有关同步问题的信息。
这是正确的方法吗?
带着敬意
我对 Guava EventBus 的工作原理有疑问。我的对象已注册到 EventBus。在 10 秒的时间间隔内,消息被发送给他们,处理完成后,我将对象中的一些变量与单例值进行比较。根据某些标准,我更改了单例值。我在 Guava 文档中进行了一些研究,但没有找到任何有关同步问题的信息。
这是正确的方法吗?
带着敬意
只要您使用EventBus
(而不是),总线就不会添加AsyncEventBus
同步问题。事件总线只是在同一个线程中立即执行您的订阅者。
只要您自己坚持使用单线程,就没有多线程,也不需要任何同步。
来自EventBus 源代码,第 91 行:
这个类对于并发使用是安全的。
我也担心并发,因为文档没有提及。仔细阅读源代码后,看到这条评论加上并发集合的使用消除了我的担忧。
volatile
关于问题提到的比较单例跨线程变化的值,您可能需要使用volatile
关键字来保护访问,以保证当前值的可见性,而不是缓存在处理器内核中的旧值。但这是一个常规的并发问题,与 EventBus 的使用无关。