【问题标题】:Synchronized Maps like Hashtable, ConcurrentHashMap etc will lock only Map Objects or even the Objects stored as Values in MapHashtable、ConcurrentHashMap 等同步 Map 将仅锁定 Map 对象,甚至锁定存储为 Map 中的值的对象
【发布时间】:2017-06-20 16:43:22
【问题描述】:
考虑下面的地图
Map<String, Employee> m = new Hashtable<String, Employee>();
虽然 Map 是同步的,一次只能被一个 Thread 访问,那么 Object 作为 value 存储在 Map 中呢?
一旦每个线程获取了employee Object,每个线程都可以对其进行更新,并且此更新不是线程安全的。
【问题讨论】:
标签:
java
object
dictionary
locking
【解决方案1】:
同步数据结构不会神奇地将它们包含的实例呈现为线程安全的。但是,它们可以帮助安全发布。您必须自己使Employee 线程安全。
还要注意ConcurrentHashMap 不会在整个地图上使用锁,并且在许多情况下可以被多个线程同时安全地访问。