做项目时,遇到这样一种需求。
比如每秒钟的并发记录为5000笔,大量的客户端每秒钟读取这5000笔,同时有一个线程后台每隔一秒,更新此记录。
很容易的想到先把这些记录加入到集合list中,然后其它客户端遍历集合list.
但会出现ConcurrentModificationException错误。
解决方式,如下几种。
1.如果在遍历时,加锁,这将严重影响并发性能。客户端或数据量越大,性能下降越厉害
2.ReadWriteLock读写分离锁,但也存在读写不能并发情况,只能读,与读并发。
3.采用CopyOnWriteArrayList,但由于每次的add时Arrays.copyof(),性能会受些影响,数据量越大,影响越明显
4.读写分离,引用的切换。会造成频繁的新生代垃圾回收。
如有更好的解决方案,欢迎指出!
比如每秒钟的并发记录为5000笔,大量的客户端每秒钟读取这5000笔,同时有一个线程后台每隔一秒,更新此记录。
很容易的想到先把这些记录加入到集合list中,然后其它客户端遍历集合list.
但会出现ConcurrentModificationException错误。
解决方式,如下几种。
1.如果在遍历时,加锁,这将严重影响并发性能。客户端或数据量越大,性能下降越厉害
2.ReadWriteLock读写分离锁,但也存在读写不能并发情况,只能读,与读并发。
3.采用CopyOnWriteArrayList,但由于每次的add时Arrays.copyof(),性能会受些影响,数据量越大,影响越明显
4.读写分离,引用的切换。会造成频繁的新生代垃圾回收。
如有更好的解决方案,欢迎指出!
探讨了在高并发场景下,如何有效处理大量客户端同时读取并更新数据的问题。对比了几种常见的解决方案,包括加锁、ReadWriteLock、CopyOnWriteArrayList及读写分离等方法,并分析了各自的优缺点。

被折叠的 条评论
为什么被折叠?



