タグ

atomicとhashtableに関するyassのブックマーク (1)

  • ConcurrentHashMapを使うならatomicなメソッドを使おう - kencharosの日記

    ConcurrentHashMapを使うときの注意点 タイトルの通りです。 ConcurrentHashMapは同期を取りつつ、パフォーマンスも優れたとても優秀なやつで、最近Webアプリケーションで、キャッシュみたいなものを作るときに使いました。 とはいえ同期を取るとはいっても以下のようなキーの存在を確認して、putするような複合アクションの呼び出し(いわゆるcheck-then-act)では同期されません。(別にこれは、従来のHahMapとかCollections.syncronizedMapとかでも同じです) // atomicではない操作。 if(!map.containsKey(key)) { map.put(key, value); } 以下が実証コードで、実行すると高い確率で複数スレッドで同一キーへのputを行います。 (今回のケースだとあまり問題にならないですが、valueを

    ConcurrentHashMapを使うならatomicなメソッドを使おう - kencharosの日記
    yass
    yass 2014/02/18
    " で、こんな時のためにConcurrentHashMapには、キーがなければ値を追加するという上記のような操作を行うputIfAbsentメソッドがあります。"
  • 1