JavaでスレッドセーフなMapを実現するConcurrentHashMap


 

javaの「java.util.HashMap」はスレッドセーフではありません

つまり、複数のスレッドから同時に値の変更が行われた場合には、どの状態の値が返ってくるか、保障されていないということになります。
アプリ内でシングルトンのオブジェクトとして値を保持しておくような場合、スレッドセーフな状態に制御するのはすこしコツが要ります。

今までは、synchronizedを使って自分で実装したり、Collections.synchronizedMapを使っていました。

しかし、jdk1.5からは「ConcurrentHashMap」という便利なクラスが使えるようになっています!

ConcurrentHashMapはjava.util.concurrentパッケージで提供されている、並行性をサポートする、スレッド・セーフなMapで、パフォーマンスもsynchronized等で実装したときより、向上しています。

使い方
今までのHashMapと同じように使えます。putやget、初期化の方法も同じですね。

 

 

複数スレッドからアクセスされるような状況でMapを使う場合は、ConcurrentHashMapを使った実装を検討しましょう。

こんな記事も読まれています


コメントを残す

サブコンテンツ

このページの先頭へ