スレッドセーフなコレクション
Javaでスレッドセーフなコレクション(HashMapなど)を使うときは synchronaizedなラッパー(?)を掛ける。
java.util.Collectionsにある以下のメソッドに対応するコレクションを渡すとスレッドセーフなコレクションが返ってくるようだ。
- synchronizedCollection(Collection c)
- synchronizedList(List list)
- synchronizedMap(Map m)
- syncronizedSet(Set s)
- synchronizedSortedMap(SortedMap m)
- synchronizedSortedSet(SortedSet s)
ちなみに、通常のHashMapはスレッドアンセーフな訳だけど、この前の某ケータイ関係のシステムでは普通にHashMapを使っていて動作不良を起こしていた*1。
ま、スレッドセーフかどうかっていうのはきっちり把握しときましょう。そして対策もきちんと理解してましょうね、というお話でした。
*1:今日聞いた話じゃシステムの半分のサーバがOutOfMemoryで落ちたらしいが。やばくね?