如果有两个Thread
共享相同的ArrayList
并且一个线程在ArrayList
上进行迭代,而另一个线程更新ArrayList
则可以获得ConcurrentModificationException
}}
E.g。
Collection<Integer> coll = new ArrayList<Integer>();
线程1:
for(Integer i : coll){
i++;
}
线程2:
coll.add(12);
我的问题是:是否有工具可以分析代码库中是否存在此类错误?我知道这意味着你必须能够解决代码库中不同部分的变量在运行时引用相同的集合,这可能是一般难以解决的问题。
但是我正在开发一个程序,在该程序中很容易识别出变量引用相同的Collection
。
是否有分析员能够警告我这种潜在的ConcurrentModificationException
(ArrayList
,HashMap
)或者您能否就哪个工具,用于检查此问题的库给我建议在我的特定上下文中,我可以很容易地看到线程之间共享哪些变量。
我现在正在看JavaParser
,但这似乎并不重要。