در یک قطعه کد جاوا یک ArrayList را داخل حلقه for each مورد دسترسی قرار می دهم. این آرایه که static است از طریق یک متد در کلاس دیگر مقدار دهی می شود. هنگام کار مقدار دهی همزمان خطای زیر را دریافت می کنم.
برای جلوگیری از این خطا چه کار می توانم بکنم؟
for (CometEvent event : sessionEvents) {
if (event.getEventType() != CometEvent.EventType.BEGIN)
continue;
HttpServletResponse response = event.getHttpServletResponse();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
PrintWriter printwriter = null;
try {
printwriter = response.getWriter();
printwriter.println(messageJson);
printwriter.flush();
// message will be send with closing the connection
printwriter.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
sessionEvents.remove(event);
}
}
و این هم پیغام خطا:
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at org.broker.comet.CometUtils.sendMessagesAsJson(CometUtils.java:84)
at org.broker.comet.CometUtils.checkAndSendMessagesAsJson(CometUtils.java:116)
at org.broker.comet.CometServlet.event(CometServlet.java:48)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilterEvent(ApplicationFilterChain.java:482)
at org.apache.catalina.core.ApplicationFilterChain.doFilterEvent(ApplicationFilterChain.java:376)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:238)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:391)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:357)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1531)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)