私は、私の会社のアプリケーションの一部として集中的な操作を書いてUIスレッドから離しておく必要があります。非常にスレッドで安全でないコンポーネントがたくさんあります。楽しい時間。Java:値を内部クラスに渡すスレッドの安全性
私は自分でこれを単純化しようとしています。それで、どうすればいいのでしょうか。
1)スレッドで安全でないコンポーネントからのデータは、読み書きされず、書き込まれません。以下に示すように
2)そのデータへの参照は、バックグラウンドスレッドに渡されるであろう:
final Object someData = getSomeData();
Runnable task = new Runnable() {
@Override
public void run() {
doSomething(someData);
}
};
はまた、モーダルダイアログが誤ってこのプロセスの間のいずれかの値を変更することからユーザーをブロックします。したがって、someDataの状態はプロセス全体で変更されず、ただ読み込まれます。
私はいつもメモリの一貫性の問題について非常に編集的です。ここには何かありますか?このように参照を渡すことで、バックグラウンドスレッドはその時点で最新の状態になりますか?
ありがとうございました。
これが意味することは、リファレンスが古くならないということです。あなたがそれを使って作業するたびに、現在の状態が反映されます。 – ChiefTwoPencils
スレッドに渡す前にsomeDataをクローンします。スレッドがそのデータで何かをやり終えたら、その結果をUIに戻すことができます。 – Heri
内部クラスは実際にはそれと関係がありません。この問題は2番目のスレッドであり、通常のスレッドセーフティの注意事項、 'synchronized'または' volatile'が必要です。 – EJP