bou*_*ppo 2 java concurrency iterator concurrent-programming
我一直在获得并发修改异常
String[] permsList = Constants.CUST_MKT_PERMS_FIELDS;
String hiddenFieldVector = new Vector<String>(permsList.length);
Iterator<String> itr = hiddenFieldVector.iterator();
for(int i = 0; i < arrayLength; i++){ //arrayLength is never null or 0
...a lot of code...
String target = fromDatabase(); //this is never null
while(itr.hasNext() && hiddenFieldVector.contains(target)){
hiddenFieldVector.remove(target);
Logger.debug("itr.next() = " + itr.next());
}
...a lot of code...
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么?
当前解决方案
while(itr.hasNext() && hiddenFieldVector.contains(target) && (itr.next().equals(target))){
itr.remove();
Logger.debug("itr.next() = " + itr.next());
}
Run Code Online (Sandbox Code Playgroud)
hiddenFieldVector.remove(target);
Run Code Online (Sandbox Code Playgroud)
不要叫remove上list而循环.循环抛出时修改列表ConcurrentModificationException.
使用iterator和调用remove上iterator,而不是list.
例:
while(itr.hasNext() && hiddenFieldVector.contains(target)){
itr.remove();
Logger.debug("itr.next() = " + itr.next());
}
Run Code Online (Sandbox Code Playgroud)