我有一个final ArrayList<RoutingTableEntry> routingTable = new ArrayList<>();,可以多次访问。
但是我只能在以下线程中得到一个ConcurrentModificationException的一个点:

Thread checkReplies = new Thread(() -> {

    while (true) {

        synchronized (routingTable) {

            for (RoutingTableEntry entry : routingTable) { // throws it here

                // do smth
            }
        }

        // [...]
    }
 });
 checkReplies.start();


即使routingTable已经同步,它也会在循环中引发异常。每个类仅执行一次该线程。

有任何想法吗?

最佳答案

从对原始问题的评论开始,您将在迭代时删除routingTable中的项目。

您不能这样做(即使routingTable同步了)

for (RoutingTableEntry entry : routingTable) { // throws it here
     // routingTable.remove(....);
}

10-06 16:13