Note that there are some explanatory texts on larger screens.

plurals
  1. POConcurrent modification exception in ArrayList and Concurrent HashMap
    primarykey
    data
    text
    <p>Following is my data structure to store data and a method for updating data.</p> <pre><code>ConcurrentHashMap&lt;String, MyOrder&gt; myOrder = new ConcurrentHashMap&lt;String, MyOrder&gt;(); public void updateOrder(MyData DR) { MyOrder Orderlist = myOrder.get(DR.keyID); Orderlist.getCanceled().add(DR); if (Orderlist.getCanceled().size() == 10) { Orderlist.getCanceled().remove(0); } /* remove order when cancelled */ Iterator&lt;MyData&gt; itr = Orderlist.getNewOrder().iterator(); MyData drm = null; while (itr.hasNext()) { drm = itr.next(); if (drm.ClOrdID.equalsIgnoreCase(DR.ClOrdID)) { Orderlist.getNewOrder().remove(drm); getTable().get(drm.InsKey).getCompOrder().remove(drm); break; } } } </code></pre> <p>I have below method which is accessed all the time every second via polling to display some data in a web page retrieving via above concurrent hash map which is also updated with data time to time and updated when orders get removed as well.</p> <pre><code>/* accessed for data display every second */ public List&lt;MyOrder&gt; getMyDataList(String keyID) { List&lt;MyOrder&gt; orderList = new ArrayList&lt;MyOrder&gt;(); try { if (myOrder.containsKey(keyID)) { orderList.add(myOrder.get(keyID)); } } catch (Exception e) { e.printStackTrace(); } return orderList; } </code></pre> <p>My question is when the methods are executed concurrently for while, it gives the following concurrent modification exception, How do I overcome this? What is the best solution to apply for this?. exception points to above method "getMyDataList"</p> <pre><code>Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(Unknown Source) [:1.6.0_22] at java.util.AbstractList$Itr.next(Unknown Source) [:1.6.0_22] at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:637) [:] at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:624) [:] at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184) [:] at com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler(JsonSerializationVisitor.java:204) [:] at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63) [:] at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120) [:] at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62) [:] at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53) [:] at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:643) [:] at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:624) [:] at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184) [:] at com.google.gson.JsonSerializationVisitor.visitUsingCustomHandler(JsonSerializationVisitor.java:160) [:] at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:101) [:] at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62) [:] at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53) [:] at com.google.gson.Gson.toJsonTree(Gson.java:220) [:] at com.google.gson.Gson.toJson(Gson.java:260) [:] at com.google.gson.Gson.toJson(Gson.java:240) [:] at com.company.jsf.order.MyBean.myOrdersData(MyBean.java:488) [:] at sun.reflect.GeneratedMethodAccessor342.invoke(Unknown Source) [:1.6.0_22] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [:1.6.0_22] at java.lang.reflect.Method.invoke(Unknown Source) [:1.6.0_22] at org.apache.el.parser.AstValue.invoke(AstValue.java:196) [:6.0.0.Final] at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) [:6.0.0.Final] at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102) [:2.0.3-FCS] at com.sun.faces.facelets.tag.jsf.core.DeclarativeSystemEventListener.processEvent(EventHandler.java:124) [:2.0.3-FCS] at javax.faces.component.UIComponent$ComponentSystemEventListenerAdapter.processEvent(UIComponent.java:2378) [:2.0.3-FCS] at javax.faces.event.SystemEvent.processListener(SystemEvent.java:102) [:2.0.3-FCS] at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2040) [:2.0.3-FCS] at com.sun.faces.application.ApplicationImpl.invokeComponentListenersFor(ApplicationImpl.java:1988) [:2.0.3-FCS] at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:284) [:2.0.3-FCS] at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:242) [:2.0.3-FCS] at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:104) [:2.0.3-FCS] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) [:2.0.3-FCS] at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135) [:2.0.3-FCS] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309) [:2.0.3-FCS] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.0.0.Final] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343) [:] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) [:] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109) [:] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) [:] at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149) [:] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) [:3.0.0.RELEASE] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) [:3.0.0.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274) [:6.0.0.Final] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [:6.0.0.Final] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [:6.0.0.Final] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final] at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final] at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final] at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final] at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Final] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final] at java.lang.Thread.run(Unknown Source) [:1.6.0_22] </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload