根据实际的可变性和并发需求,用合适的集合替代 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
可自然配合当前的集合和并发映射操作。
旧方式
Hashtable
现代方式
ConcurrentHashMap
自 JDK
5
难度
中级
JDK 支持
用现代替代方案取代旧式同步集合
可用
自 JDK 5 起广泛可用(2004 年 9 月)
工作原理
Vector 和 Hashtable 通过旧式 API 同步每个操作。现代代码通常应对线程封闭的数据使用 ArrayList 或 HashMap,并在需要共享修改时使用专门设计的并发集合。
相关文档
证明