2011-01-15 7 views
4

私は同時ハッシュマップを使用していましたが、値を設定して取得したメソッドを持っていましたが、同時ハッシュマップを使用するとゲッターとセッターを同期させる必要がありますか?これは冗長ですか? 1つのデザインは良いですか?同時ハッシュマップは同期ゲッター/セッターを必要としませんか?

また、同期ゲッターとセッターを持つハッシュマップよりも速く同期することなく並行ハッシュマップですか?これは、高性能システムのため

ある

+0

何を設定していますか? putとgetを使って値を設定する?または、ハッシュマップ自体のゲッターとセッターを作成しますか? –

+0

はい、私のメソッドにはputとgetが含まれています。 – Jason

答えて

7
  1. java.util.concurrent.ConcurrentHashMapは、それはあなたがまだ「論理」レースを作成しないように注意する必要がありsynchronized(object)
  2. を使用するよりも高速です

  3. スレッドセーフですありがとうこのようなコードによる条件

    if (map.get(key) != null) { 
        map.put(key, new SomethingStrictlyUnique()); 
    } 
    
  4. 大まかには、synchroni並行コレクションを持つzedコレクションは、わずかなリスクで劇的な改善をもたらす可能性があります。スケーラビリティthe javadocによれば

  5. 、ConcurrentHashMapのによって返される反復子は「弱一貫性」である(代わりに高速フェイル)イテレータを構築したときに同時変更を許容するように、横断エレメントは、それらが存在するように、及びの変更を反映することができますイテレータの構築後のコレクション。

1

1)一つだけの操作(getメソッドと同様にのみ指定されたキーのマップ値を返します)、または任意のスレッドセーフな操作を行うゲッター& setterメソッドをした場合、あなたは必要ありませんそれらのゲッターの明示的な同期ブロック&セッター。

2)はい、同期ブロックなしの同時ハッシュマップを使用すると、パフォーマンスが大幅に向上します。

注:ConcurrentHashMapは弱く一貫性があり、ほとんどの場合、受け入れ可能です。

関連する問題