添加元素时java.util.ConcurrentModificationException?

时间:2014-05-06 19:00:56

标签: java multithreading servlets concurrency java.util.concurrent

我有一个servlet,它使用服务来解析YAML文件。但当我在我的servlet上放置一些用户流量时,我得到了:

SEVERE: Servlet.service() for servlet [SitesController] in context with path [] threw exception [java.util.ConcurrentModificationException] with root cause
java.util.ConcurrentModificationException
    at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1129)
    at java.util.ArrayList$SubList.listIterator(ArrayList.java:1009)
    ...
    at com.example.UrlRedirectEngin.redirectoToRespectiveSubDomain(UrlRedirectEngin.java:250)

我不确定异常是否来自解析YAML文件。但是,异常指向我在其下面呈现页面line 250:

的行
request.getRequestDispatcher(JSP_PAGE).forward(request, response);

我只是想知道在向ConcurrentModificationException添加元素时是否也会发生Map? 如果是,我该如何处理这个问题。感谢。

2 个答案:

答案 0 :(得分:1)

该行

request.getRequestDispatcher(JSP_PAGE).forward(request, response);

转发到JSP页面。该错误也可能在该JSP内部(堆栈跟踪的一部分可能隐藏原始错误)

答案 1 :(得分:0)

ConcurrentModificationException表示您在尝试阅读时正在编辑地图/集合。 简单的例子:

final List<String> list = new ArrayList<String>()
    private static final long serialVersionUID = 1L; {
        {
            add("Hi");
            add("This is a test");
        }
    };
for(final String string : list) {
    if(string.equals("Hi")) {
        list.remove("Hi");
    }
}

我认为getRequestDispatcher在您使用它时正在修改您的地图。