社区
Java SE
帖子详情
关于 ReentrantLock和CopyOnWriteArrayList一个疑惑
omg_self
2017-07-22 03:01:15
网上讲到CopyOnWriteArrayList读写分离,看了一下,是写的时候使用了ReentrantLock,读的过程中,新增一个副本;但是在写的过程中还可以进行读,那么这个锁ReentrantLock持有的锁对象(这也是一个疑问?ReentrantLock到底持有的什么)为什么还允许别的进程读???换成Synchronized可不可以??
...全文
340
3
打赏
收藏
关于 ReentrantLock和CopyOnWriteArrayList一个疑惑
网上讲到CopyOnWriteArrayList读写分离,看了一下,是写的时候使用了ReentrantLock,读的过程中,新增一个副本;但是在写的过程中还可以进行读,那么这个锁ReentrantLock持有的锁对象(这也是一个疑问?ReentrantLock到底持有的什么)为什么还允许别的进程读???换成Synchronized可不可以??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
我爱兔宝宝
2017-07-27
打赏
举报
回复
ReentrantLock是用来保证写操作是互斥的,可以替换为Synchronized 读写的数据不是同一份,所以读的时候是可以写的,只需要写完后,原子的将当前指针指向写入的新数据数组即可。
soton_dolphin
2017-07-27
打赏
举报
回复
ReentrantLock 有两点胜过用synchronized 1. ReentrantLock 有一个tryLock 方法,如果获得不到锁,会即刻放弃,不会造成死锁 2. ReentrantLock 可以跨不同的方法使用,在A方法里加锁,可以在B方法里解锁。 需要注意的是,解锁时,调用unlock方法的次数一定要和lock(), tryLock() 的次数一致。 如果少了,就会造成死锁,如果多了,就会抛出异常
soton_dolphin
2017-07-22
打赏
举报
回复
CopyOnWriteArrayList, 读的是副本的值,写的是原始list的值。
ArrayList
和
Copy
On
Write
ArrayList
本文深入分析
ArrayList
和
Copy
On
Write
ArrayList
的底层实现与并发特性。
ArrayList
基于动态数组,查询快但增删需元素移动,扩容时复制数组;
Copy
On
Write
ArrayList
采用读写分离与写时复制策略,增删改加锁、读不加锁,适用于读多写少场景。重点对比二者在内存占用、GC影响、线程安全及实时一致性方面的差异。
线程安全的list之synchronizedList和
Copy
On
Write
ArrayList
文章介绍了线程安全的List集合synchronizedList和
Copy
On
Write
ArrayList
。synchronizedList通过在方法中使用synchronized同步锁保证线程安全,但遍历需额外加锁,否则可能出现数据问题,其读写都加锁,效率较低。
Copy
On
Write
ArrayList
修改时复制新数组操作,用Re
entr
ant
Lock
保证线程安全,读写互不影响,效率高,适合读多写少场景。
Copy
On
Write
ArrayList
原理解析
本文深入探讨了
Copy
On
Write
ArrayList
的实现原理,包括其线程安全特性、写时复制策略、迭代器的弱一致性,以及如何通过Re
entr
ant
Lock
保证并发安全性。
Copy
On
Write
ArrayList
的原理和使用方法
本文介绍了
Copy
On
Write
ArrayList
,它是
ArrayList
的线程安全变体。通过示例展示
ArrayList
在多线程读写时会抛并发异常,而
Copy
On
Write
ArrayList
可解决该问题。还分析了其原理,包括增删改加锁、读取不加锁,最后阐述了它的优缺点,如解决并发但有内存占用和数据一致性问题。
Java SE
62,621
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章