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