Skip to content

Commit 9952944

Browse files
committed
ignore
1 parent b5095d5 commit 9952944

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

‎Java/concurrent/java-juc-CopyOnWriteArrayList.java‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,16 @@
55
* 添加操作多的时候,效率低
66

77
# 写入并复制
8-
* 每次写入数据的时候,都会在低层复制出新的一个列表,再进行添加
8+
* 每次写入数据的时候,都会在低层复制出新的一个列表,再进行添加
9+
10+
# 它要处理的问题
11+
* Java的list在遍历时,若中途有别的线程对list容器进行修改,则会抛出 ConcurrentModificationException 异常
12+
* 而 CopyOnWriteArrayList 由于其"读写分离"的思想,遍历和修改操作分别作用在不同的list容器
13+
* 所以在使用迭代器进行遍历时候,也就不会抛出 ConcurrentModificationException 异常了
14+
15+
* 一句话,它就是为了解决在高并发下,执行修改不会抛出异常
16+
17+
# 它带来的问题
18+
* 一是内存占用问题,毕竟每次执行写操作都要将原容器拷贝一份,数据量大时,对内存压力较大,可能会引起频繁GC
19+
* 二是无法保证实时性,Vector对于读写操作均加锁同步,可以保证读和写的强一致性
20+
* 而 CopyOnWriteArrayList 由于其实现策略的原因,写和读分别作用在新老不同容器上,在写操作执行过程中,读不会阻塞但读取到的却是老容器的数据

0 commit comments

Comments
 (0)