CopyOnWriteArrayList和ConcurrentHashMap背后的原则差异

时间:2013-07-17 19:18:44

标签: arraylist concurrenthashmap copy-on-write

在高级java集合API中,我们有CopyOnWriteArrayList和ConcurrentHashMap。然而,这些数据结构的基本原则是不同的。即ConcurrentHashMap仅锁定正在进行写操作的Map的一段。这就是它如何在不影响性能的情况下防止同步问题。

另一方面,

CopyOnWriteArrayList通过复制原始List来防止并发问题。为什么这些实现如此不同?是Java正在测试哪个更好用?

1 个答案:

答案 0 :(得分:0)

并发数据结构旨在确保数据结构上的任何单独操作序列始终保持从其自身观点一致的状态,但通过读取数据结构块形成“快照”逐件可能不一定代表数据结构所持有的任何状态。例如,如果当一个人正在读出一组用户时,“Zachary”被重命名为“Adam”,重命名的用户可能会被读作“Adam”,“Zachary”,两者或两者都没有。即使在枚举期间,集合从未处于用户从未以两个名称存在的状态,或者两者都不存在,但枚举可能使其看起来像它一样。

写时复制集合旨在让人们拍摄集合的整个状态的快照,并保证集合实际具有该状态的某个时刻。每个操作(包括快照请求)的结果应与在发出请求和报告完成之间的某个离散时刻执行的每个操作一致。如果在完成之前给出两个请求,则选择哪个操作在另一个之前是任意的,但必须存在全局一致的排序。