あなたはアトミック複数の操作を実行する必要が非常にまれで除いConcurretnHashMapと同期して使用する必要はありません。
サイズを取得するだけで、同期させることなく呼び出すことができます。
私はConcurrentHashMapの同期を使用する際に明確にする...
はあなたがオンデマンドで作成する高価な物を持っていると言います。同時読み込みを行いたいだけでなく、値が一度だけ作成されていることを確認したい場合もあります。
public ExpensiveObject get(String key) {
return map.get(key); // can work concurrently.
}
public void put(String key, ExepensiveBuilder builder) {
// cannot use putIfAbsent because it needs the object before checking.
synchronized(map) {
if (!map.containsKey(key))
map.put(key, builder.create());
}
}
注:これは、すべての書き込みが同期されている必要がありますが、読み込みは引き続き可能です。
ConcurrentHashMapは内部的に同期されています。上に独自の同期ブロックを追加しても、あなたが望むものが得られない場合があります。 – krock
@krockどのように使用するか注意する必要があります。例を追加する。 –