つい最近までは、スレッドセーフなハッシュマップやリストはjava.util.concurrentのConcurrentHashMapなどで作るもんだと思っていたけど、スレッドセーフなコレクションクラスをどのように定義すれば良いか調べていたら最新のバージョンではCollections.synchronized***で作るのが良いらしい。ということで、簡単すぎるけど、例を紹介して備忘録とする。もちろん、中身はLinkedListなどでも良く、必要なデータ型の特性に合わせて使い分けることができる。ちょっと便利になった気がする。同時にVectorがもはや後方互換のためだけに存在することを知って、愕然としている。学生時代とはずいぶんと変わったものだ。
import java.util.Collections;
…
List<Integer> sampleList = Collections.synchronizedList(new ArrayList<Integer>());
Map<String, Integer> sampleMap = Collections.synchronizedMap(new HashMap<String, Integer>());
なお、同期制御をより効率的に行うためには、java.util.concurrentの中のクラスを使うと良いらしい。コメントで教えてもらったので、ここよりも詳細に解説しているurlも載せておく。