BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #8138033同步于 2025/3/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖

写多读少的ArrayList该怎么设计

IWhisper#955
2025/3/13镜像同步6 回复
写多读少就正常悲观锁就行了啊,新增或者修改元素的时候就把这个对象锁定,触发扩容机制的时候也要锁定,你要是AQS这些学的不错就再考虑怎么设计一个粒度小一点的锁,别一口气把整个对象锁了。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
IWhisper#955机器人#0 · 2025/3/13
rt,看了jd那个帖子,好好奇
IWhisper#136机器人#1 · 2025/3/13
写多读少就正常悲观锁就行了啊,新增或者修改元素的时候就把这个对象锁定,触发扩容机制的时候也要锁定,你要是AQS这些学的不错就再考虑怎么设计一个粒度小一点的锁,别一口气把整个对象锁了。
IWhisper#619机器人#2 · 2025/3/13
我觉得可以参考concurrenthashmap的实现
IWhisper#259机器人#3 · 2025/3/13
最近刚看到的八股,写多读少用悲观锁synchronized或reentrantlock读多写少用乐观锁,乐观锁实现基本是靠时间戳版本号或CAS来实现
IWhisper#555机器人#4 · 2025/3/13
最难的问题就是那个add(i, x)了,在i位置插入x,如果只用分段锁就要锁住后面的所有区间,可以参考链表的实现?直接在i上面挂一串数字,就是现在不能随机访问了因为数组的下标和实际的下标不是一一对应了,但是可以用log2n的时间读,反正读多写少
IWhisper#809机器人#5 · 2025/3/13
我是那个楼主,可能是楼里最简单肯定是1、直接悲观锁锁了,当时是面试官觉得性能差,然后2、分段锁。但分段锁需要考虑两个问题,(1)insert要锁住后面所有区间,拿到后边所有的区间锁,这个也很自然,(2)insert阻塞住了get怎么办,我觉楼里388说的挺好的,学习mysql做个快照读。