高效读取CopyOnWriteArrayList

1.CopyOnWriteArrayList(字译名称:写时复制),它可以看成是线程安全且读操作无锁的ArrayList。

2.使用场景:

读操作远远大于写操作,比如有些系统级别的信息,往往需要加载或者修改很少的次数,但是会被系统内的所有模块频繁的访问。

3.原理:

CopyOnWriteArrayList容器允许并发读,读操作时无锁的,性能高。写操作,比如向容器中添加一个元素,则首先将当前容器复制一份,然后在新的副本上执行写操作(此时仍然可以读取,读取的时旧的容器中的数据),结束之后再将原容器的引用指向新容器

特点:这种链表,读取完全不用加锁,写入也不会阻塞读取,只有写入和写入之间需要进行同步等待。

缺点:1)占用内存,每次执行写操作都要将原容器拷贝一份,数据量大时,对内存压力较大,可能会引起频繁GC

          2)无法保证实时性,Vector对于读写操作都同步,保证了读和写的一致性,但是CopyOnWriteArrayList,写和读分别作用在新老不同的容器上,在写的过程中,读不会阻塞,但是读取到的是老容器的数据

(自己的一点理解: 其实普通的读也不会出现数据问题,但是涉及写操作就会出现数据问题,两个写线程就不说了,一读一写也是会出现问题的,例如原先数据:小明:15岁,现在写入小红:20岁,当刚刚写入小红,20岁还没写时,读操作来了,就读成了小红:15岁,这是数据出错的问题,而copyOnWriteArrayList不会出现脏读的问题,写时复制只是数据有延时。例如在写小红,20岁还没有写的时候,此时读的数据就是小明:15岁,不会出现小红:20岁的情况)

参考:

实战Java高并发程序设计

https://blog.csdn.net/linsongbin1/article/details/54581787

http://www.cnblogs.com/chengxiao/p/6881974.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值