问题背景
生产环境(JDK8u144)中有部分公共数据存在xml中,使用时会将xml数据读取到内存,以 ArrayList
存储,多个用户(多线程)对同一个 ArrayList
使用了 Collections
的sort(List,Comparator)方法进行排序,从而触发了 ConcurrentModificationException
。其本质就是一个并发问题。
问题复现
1 |
|
以上Test Case将复现 ConcurrentModificationException
异常
#ConcurrentModificationException
顾名思义,ConcurrentModificationException
是并发修改引起的异常。追溯 JDK8u144
的 Collections::sort
实现可以发现,最终调用的是ArrayList的sort方法
1 | //Collections::sort |
而在 JDK8u20
之前
解决方案
加锁
1 |
|
使用 CopyOnWriteArrayList
1 |
|
杨威发布日期 :2017-09-25自由转载-非商用-非衍生-保持署名(知识共享3.0许可证)