final としてマークされた 1 つの共有配列の要素にアクセスする複数のスレッドがあります (別の配列を割り当てようとはしません)。何かを同期する必要がありますか? 要素への読み取り/書き込みがアトミックであると想定できますか?
質問する
1332 次
2 に答える
6
配列が long または double 型でない限り、書き込みはアトミックです。ただし、書き込みが他のスレッドから見えることが保証されないため、atomic プロパティは役に立ちません。
配列が参照型の場合、問題はさらに悪化します。なぜなら、他のスレッドがあなたのオブジェクトをばらばらに見るかもしれないからです。
要素のランダム アクセス コレクションを安全に共有するにはsynchronizedList
、plain のラッパーArrayList
またはロックフリーのいずれかが必要CopyOnWriteArrayList
です。
配列の固定サイズに問題がなければ (そう思われるかもしれませんが)、AtomicReferenceArray
アトミックな比較および設定操作と取得および設定操作が可能になるため、これも調べてください。ロックを必要とせずに必要です。
于 2012-11-05T20:26:28.013 に答える
0
ベクトルの要素を読み書きできる複数のスレッドがあるため、あるスレッドが読み込んだときに、別のスレッドが同じセルを書き込むことがあります。同期ブロックを配置します。擬似コードの例:
public void get(index i){
synchronized(..){
//your code
}
}
于 2012-11-05T20:38:01.390 に答える