2 回答
TA贡献1829条经验 获得超6个赞
ConcurrentHashMap
是线程安全的数据结构。如果您List<String>
在值中使用(不是线程安全的),ConcurrentHashMap
则List
不是线程安全的,因为两个线程可以保护列表的引用,然后并行修改它。
ConcurrentHashMap
是线程安全的意味着它的操作put
和putAll
等是线程安全的。这并不意味着您用作其值的数据结构也成为线程安全的。
如何做到这一点?
在你
List<String>
的.CopyOnWriteArrayList
ConcurrentHashMap
进行自定义
List
并制作他们的所有方法Synchronized
。通过传入将非线程安全转换
List
为线程安全。List
Collections.synchronizedList(non-Thread safelist)
TA贡献1798条经验 获得超3个赞
我说我们可以为此目的使用 ConcurrentHashMap ..他们说好的..
也许没关系,也许不行。这取决于key_1和key_2之间是否有特殊关系。
假设一个线程为 key_1 存储了一个新值,然后就在它可以为 key_2 存储相关值之前,它的时间片结束。然后另一个线程在第一个线程挂起时检查 key_1 和 key_2 的值。它看到 key_1 的新值,但看到 key_2 的旧值。
在那一点上,第一个线程只完成了更新两个键的一半是否重要?
插入 aConcurrentHashMap
将确保 map 数据结构本身在多线程应用程序中不会做任何有趣或错误的事情,但如果应用程序依赖于这两个键总是一起更新,那么你仍然需要某种显式锁定以确保它们始终一起更新。
添加回答
举报