Guava EventBus の動作原理について質問があります。私のオブジェクトは EventBus に登録されています。10 秒間隔でメッセージが送信され、そこで処理が行われ、オブジェクト内の変数とシングルトン値を比較します。いくつかの基準によって、シングルトン値を変更します。Guava のドキュメントを調べましたが、同期の問題に関する情報は見つかりませんでした。
これは正しい方法ですか?
よろしく
Guava EventBus の動作原理について質問があります。私のオブジェクトは EventBus に登録されています。10 秒間隔でメッセージが送信され、そこで処理が行われ、オブジェクト内の変数とシングルトン値を比較します。いくつかの基準によって、シングルトン値を変更します。Guava のドキュメントを調べましたが、同期の問題に関する情報は見つかりませんでした。
これは正しい方法ですか?
よろしく
EventBus(ではなく)を使用している限り、バスによってAsyncEventBus同期の問題が追加されることはありません。イベントバスは、サブスクライバーを同じスレッドですぐに実行するだけです。
あなた自身が単一のスレッドに固執する限り、マルチスレッドはなく、同期も必要ありません。
EventBus ソース コードの91 行目:
このクラスは同時使用しても安全です。
ドキュメントでは言及されていないため、私も並行性について心配していました。ソースコードを熟読した後、このコメントと並行コレクションの使用を見て、私の懸念は解消されました。
volatileスレッド全体でシングルトンの変化する値と比較するという質問の言及に関しては、volatileキーワードを使用してアクセスを保護し、プロセッサコアにキャッシュされた古い値ではなく現在の値の可視性を保証する必要がある場合があります。しかし、これは EventBus の使用とは関係なく、通常の同時実行の問題です。