自己编写一个获取List子集的一个函数,但是在多线程的情况下,会报java.util.ConcurrentModificationException subList错误。
在一个线程中有一个函数使用inputlist.get(i),会报java.util.ConcurrentModificationException,检查发现在getSubList方法中,
public static<W> List<W> getSubList(List<W> inputlist, int beginIndex,int endIndex){
List<W> result = null;
if((beginIndex > endIndex) || list.size() <= beginIndex || list.size() <= endIndex){
result = null;
}else if(beginIndex == endIndex){
result = new ArrayList<W>();
result.add(list.get(beginIndex));
}else{
result = list.subList(beginIndex, endIndex);
result.add(list.get(endIndex));
}
return result;
}
在一个线程中有一个函数使用inputlist.get(i),会报java.util.ConcurrentModificationException,检查发现在getSubList方法中,
result = list.subList(beginIndex, endIndex);result.add(list.get(endIndex));
这样写会出错,因为是同一个引用,所以应该改成
result = new ArrayList<W>(list.subList(beginIndex, endIndex));
result.add(list.get(endIndex));