1. Collections.unmodifiableMap、Collections.synchronizedMap 的工程价值
Collections.unmodifiableMap 与 Collections.synchronizedMap 的工程价值分别是什么?
- unmodifiableMap 的不可变视图
- synchronizedMap 的同步包装
- 两者差异与适用场景
unmodifiableMap 返回一个只读视图,任何修改操作抛 UnsupportedOperationException,用于暴露不可变数据、防止内部状态被修改,适合作为对外只读接口(如配置、常量)。synchronizedMap 用互斥锁包裹所有方法,保证线程安全,但每个方法调用都加锁、粒度粗、并发度低,且复合操作(如迭代时)仍需要外部同步。工程价值:unmodifiableMap 强调"不变性",synchronizedMap 强调"线程安全",二者适用场景不同,实践中现代并发场景多优先用 ConcurrentHashMap 替代 synchronizedMap。
unmodifiableMap 管"不可变",synchronizedMap 管"线程安全",价值取向不同。unmodifiableMap 利于安全发布与防御性编程,synchronizedMap 因粗粒度锁性能差,通常被并发容器替代。