做项目时,遇到这样一种需求。
比如每秒钟的并发记录为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.读写分离,引用的切换。会造成频繁的新生代垃圾回收。
如有更好的解决方案,欢迎指出!