Рассмотрим следующий код:Исключение одновременной модификации. Как избежать этого сценария?
List tableData = null;
tableData = new ArrayList(records.size());
for (Iterator iter = records.iterator(); iter.hasNext();) {
Test record = (Test) iter.next();
Map rowData = createRowData(record);
if (rowData != null) {
// sorted insert
Date newDate = (Date) rowData.get(TestModel.TIMESTAMP);
boolean done = false;
for (int row = 0; row < tableData.size(); row++) {
Map currentRow = (Map) tableData.get(row);
Date currentDate = (Date) currentRow.get(TestModel.TIMESTAMP);
if (currentDate.after(newDate)) {
tableData.add(row, rowData);
done = true;
break;
}
}
if (!done) {
tableData.add(rowData);
}
}
}
} catch(Exception e) {
throw new RuntimeException("Error reading fuel and SMU data", e);
}
return tableData;
records
здесь являются new Vector()
, который инициализируется между ними.
Поскольку ArrayList имеет аргумент вместимости int. Как я могу использовать CopyOnWriteArrayList
в этом сценарии?
`STACKTRACE:
at com.mincom.explorer.uif.AbstractRequestHandler.handleException(AbstractRequestHandler.java:255)
at com.mincom.explorer.uif.AbstractRequestHandler.readData(AbstractRequestHandler.java:137)
at com.mincom.jive.service.RequestExecutor$RequestHandlerCommand.mainProcess(RequestExecutor.java:156)
at com.mincom.util.executor.AbstractCommand.run(AbstractCommand.java:56)
at com.mincom.util.executor.SimpleExecutor$WorkerThread.run(SimpleExecutor.java:156)
THROWABLE: java.lang.RuntimeException: Error reading fuel and SMU data
at minestar.production.presentation.page.fuel.smu.assistant.*.getEventsUsingFilter(*.java:243)
at minestar.production.presentation.page.fuel.smu.assistant.*.processReadData(*.java:174)
at com.mincom.explorer.uif.AbstractRequestHandler.readData(AbstractRequestHandler.java:129)
at com.mincom.jive.service.RequestExecutor$RequestHandlerCommand.mainProcess(RequestExecutor.java:156)
at com.mincom.util.executor.AbstractCommand.run(AbstractCommand.java:56)
at com.mincom.util.executor.SimpleExecutor$WorkerThread.run(SimpleExecutor.java:156)
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at *.production.presentation.page.fuel.smu.assistant.*.getEventsUsingFilter(*.java:222)
... 5 more`
Я снова модифицировал кусок кода. PLease посмотреть.
Начните с объяснения, что именно делает исключение. –
Этот вопрос полностью расплывчатый и неясный. Пожалуйста, укажите ** полный исходный пример **, а также ** полную ** исключение stacktrace 'ConcurrentModificationException', которое мы можем попробовать и скопировать, чтобы помочь вам точно. –
@MarkoTopolnik Я отредактировал мой вопрос. – NewBie