missedMSRB是在它2187元和列表試圖運行下面的代碼片段此代碼塊的併發修改異常,請幫忙嗎?
List<List<String>> subList = getSubList(missedMSRB, 1000);
for (List<String> subMSRB : subList) {
StringBuffer sql = new StringBuffer(NamedQueries.msSQL);
sql.append("(");
for (int i1 = 0; i1 < subMSRB.size(); i1++) { //Line 463 Throws Exception
if (i1 < subMSRB.size() - 1) {
sql.append("?,");
} else {
sql.append("?)");
}
} ....
代碼失敗與follwoing例外,爲什麼我收到併發修改,以及如何有任何建議擺脫同
時下面PreparedStatement psMSQL2 = msSQL.prepareStatement(sql.toString());
psMSQL2.setString(1, runDate);
psMSQL2.setString(2, runDate2);
int i = 3;
for (String s : subMSRB) {
psMSQL2.setString(i, s.trim());
i++;
}
ResultSet msSQL = psMSQL2.executeQuery();
logger.debug("SQL executed");
while (msSQL.next()) {
missedMSRB.remove(msSQL.getString(1));
}
getSubList IMPL
13 Jan 2015 10:42:58,974 [main] ERROR RunAnalytics: General Error: null
java.util.ConcurrentModificationException
at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1169)
at java.util.ArrayList$SubList.size(ArrayList.java:998)
at com.abc.Analytics.RunAnalytics.getCountCheck(RunAnalytics.java:463)
at com.abc.Analytics.RunAnalytics.analyticsExecute(RunAnalytics.java:342)
at com.abc.Analytics.RunAnalytics.main(RunAnalytics.java:84)
剩餘代碼// 更正
public static List<List<String>> getSubList(List<String> inputList, int subListSize) {
int listSize = inputList.size();
int noOfLoops = listSize/subListSize;
int remainingListSize = listSize % subListSize;
List<List<String>> subList = new ArrayList<List<String>>();
for (int i = 0; i < noOfLoops; i++) {
int fromIndex = i * subListSize;
int toIndex = (fromIndex) + subListSize;
subList.add(new ArrayList<String>(inputList.subList(fromIndex, toIndex)));
if ((remainingListSize != 0)
&& (toIndex == (listSize - remainingListSize))) {
subList.add(new ArrayList<String>(inputList.subList(toIndex, listSize)));
}
}
return subList;
}
任何其他線程修改列表? – njzk2
是別的什麼修改'subMSRB'? (根據你的示例代碼沒有顯示) – gtgaxiola
除非我錯過了一些東西,沒有足夠的信息來解釋這個問題。如果在迭代時更改List,則會出現ConcurrentModificationException異常。你能發佈更多的代碼嗎? –