私はこのようなハッシュマップを作成する必要があります。出力マップのここJAVAの同時実行性とロックが
サンプル:
---------------------
| xxx | a b c d |
| yyy | a' b' c' d' |
| zzz | A B C D |
---------------------
両方のスレッドがエントリの作成に貢献。したがって、例えば、スレッド1が記憶するように設定され、次のデータがあります
-----------------------------------
| 1 | (xxx,a) (yyy,a') (zzz,A) |
| 2 | (xxx,b) (yyy,b') (zzz,B) |
-----------------------------------
を、スレッド2が有する:
| 1 | (xxx,c) (yyy,c') (zzz,C) |
| 2 | (xxx,d) (yyy,d') (zzz,D) |
-----------------------------------
をしたがって、同じ瞬間に、2つのスレッドが計算することができます。同じキー:スレッド1(xxx、a)とスレッド2(xxx、c)。
私が使用できるロック/アンロック機構は何ですか?
I)}は、以下の1
ReadWriteLock lock = new ReentrantReadWriteLock();
executor.submit(() -> {
lock.writeLock().lock();
try {
sleep(1);
map.put("foo", "bar");
} finally {
lock.writeLock().unlock();
}
を試みました。
しかし、私はハッシュマップ全体をロックしたくありません。私はロックを作成したいと思っていますが、処理中に両方のスレッドが同じキーで動作する場合にのみロックを作成します。
ありがとうございます。
キーがあらかじめわかっていないとどうなりますか? – BretC
'map.putIfAbsent()'も使用して、初期化段階をスキップすることができます。しかし、値にアクセスする前に毎回これを行う必要があります。しかし、取得しようとすると最適化することができ、失敗した場合にのみ 'putIfAbsent()'を実行します。 – Harmlezz
先ほど説明した代替のサンプルコードを追加しました。 – Harmlezz