【问题标题】:java.util.ConcurrentModificationException while adding elements?添加元素时出现java.util.ConcurrentModificationException?
【发布时间】:2014-05-06 19:00:56
【问题描述】:

我有一个 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);

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

【问题讨论】:

  • 你能说明异常发生在哪一行吗?
  • @ChristianKuetbach:是的,你可以在帖子中看到这一行。
  • @tokhi 我只能看到 ArrayList 类中的行。在您的代码中,只有一个 ArralyList 可见。该列表不会被您的代码修改,也不会引发此异常。我需要你的代码(和代码)的行号
  • @ChristianKuetbach:我更新了帖子。
  • 如果您对该问题投反对票,请同时写下原因。谢谢。

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


【解决方案1】:

线

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

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

【讨论】:

    【解决方案2】:

    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 在您使用地图时正在修改您的地图。

    【讨论】:

    • 但我没有删除任何东西
    • 但也许你正在改变一些东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    相关资源
    最近更新 更多