CopyOnWriteArrayList

tim-qtp...小于 1 分钟Java基础集合

写时复制是一种保证数据一致性和线程安全的技术,核心思想是在进行写操作时,不直接修改原来的数据结构,而是先复制一份副本,在副本上进行修改,然后将修改后的副本替换原来的数据结构。

然后:

  • 读操作不加锁:所有读操作(如 getiterator)都是无锁的,直接访问当前数组。
  • 写操作加锁:每次写操作(如 addsetremove)都会先加锁,再创建一个新的数组副本,修改在副本上进行,完成后再将副本替换为新的数组。

由于写操作涉及复制整个数组,所以它的写操作开销较大,但读取操作则完全无锁。这使得 CopyOnWriteArrayList 适合于读多写少的场景。