monthArray
複数のコンシューマーによって読み取られ、単一のperiodicallスケジュールされたアップデータースレッドによって定期的に更新されるデータ変数があります。すべて非同期。
更新を安全に実行するために、これらのオプションの両方を検討しました。
ArrayList<String> tempArray = ModelJob.getDistinctMonths(user, true);
synchronized (monthArray) {
monthArray = tempArray;
}
また
synchronized (monthArray) {
monthArray = ModelJob.getDistinctMonths(user, true);
}
最初のものの背後にある考え方は、ModelJob.getDistinctMonths(user, true);
呼び出しに時間がかかり、同期を保持してブロックする必要がある時間より長くしたくないということです。更新された配列で古い配列をすばやく再割り当てするためだけです。しかし、あいまいなようで、完全に必要な場合にのみやりたいと思います。jvmがこの同期と天気をどのように処理するか、または前者を実行しないとパフォーマンスが向上するかについて、誰かが私に洞察を与えることができますか?基本的に、jvmが静的ModelJob呼び出し全体をブロックするかどうか、または再割り当てのブロックのみで回避できて安全かどうか、もしそうなら、そうするのに十分賢いかどうかを尋ねます。