レガシー同期コレクションからモダンな代替手段へ
VectorとHashtableを、実際の可変性と並行処理の要件に応じて選択したコレクションに置き換える。
コード比較
✕ Legacy synchronized collection
Hashtable<String, Session> sessions = new Hashtable<>(); sessions.put(id, session);
✓ Concurrent Collections API
ConcurrentMap<String, Session> sessions = new ConcurrentHashMap<>(); sessions.put(id, session);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
意図が明確な並行処理
選択した型により、共有を想定しているかどうかが明確になります。
優れたスケーラビリティ
ConcurrentHashMapは通常のアクセスでテーブル全体を単一のロックで保護することを避けます。
モダンなAPI
現在のコレクション操作やConcurrentMap操作と自然に連携します。
旧来のアプローチ
Hashtable
モダンなアプローチ
ConcurrentHashMap
JDKバージョン
5
難易度
中級
JDKサポート
レガシー同期コレクションからモダンな代替手段へ
利用可能
JDK 5(2004年9月)以降、広く利用可能
仕組み
VectorとHashtableは、レガシーAPIを通じてすべての操作を同期します。モダンなコードでは通常、スレッド内に限定されたデータにはArrayListまたはHashMapを使用し、共有されたデータを変更する必要がある場合には目的に特化した並行コレクションを使用します。
関連ドキュメント
証明