私はJavaの並行処理で新しく、get(マップのように)でアクセスする必要のあるデータを保持するクラス(以下のサンプルコードでは2倍)を持っていますが、パフォーマンス上の理由から配列。java - 複数のオブジェクトへの並行更新
これはマルチスレッド環境で実行され、このインデックスは時々更新される必要があります。
public class ConcurrencySampleCode {
private static Object lock = new Object();
private Map<String, Integer> map = ...
private double[] array = ...
public Double get(String id) {
synchronized (lock) {
Integer i = map.get(id);
if (i == null) {
return null;
}
return array[i];
}
}
public void update() {
Map<String, Integer> tmpMap = updateMap(...);
double[] tmpArray = updateArray(...);
synchronized (lock) { // should be atomic
map = tmpMap;
array = tmpArray;
}
}
}
このコードが正しいかどうかわかりませんか?また、get関数でsynchronizedキーワードが必要ですか?
これを行うには良い方法がありますか?あなたの助け
、[のConcurrentMap](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentMap.html)の実装があります。 –
合意し、ConcurrentMapを使用してください。たとえば、ConcurrentHashMapはスレッドセーフで、ここでの処理よりも高速です。 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html –
[こちらを読む](http://docs.oracle.com/javase/tutorial/essential/)並行性/ sync.html)。 – displayname