CopyOnWriteArrayList
...小于 1 分钟Java基础集合
写时复制是一种保证数据一致性和线程安全的技术,核心思想是在进行写操作时,不直接修改原来的数据结构,而是先复制一份副本,在副本上进行修改,然后将修改后的副本替换原来的数据结构。
然后:
- 读操作不加锁:所有读操作(如
get
、iterator
)都是无锁的,直接访问当前数组。 - 写操作加锁:每次写操作(如
add
、set
、remove
)都会先加锁,再创建一个新的数组副本,修改在副本上进行,完成后再将副本替换为新的数组。
由于写操作涉及复制整个数组,所以它的写操作开销较大,但读取操作则完全无锁。这使得 CopyOnWriteArrayList
适合于读多写少的场景。