gpt4 book ai didi

java - Java 8 中线程 "main"java.util.ConcurrentModificationException 中的异常

转载 作者:行者123 更新时间:2023-12-02 03:21:09 24 4
gpt4 key购买 nike

当我运行以下代码时,出现异常,但我不知道为什么。

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at simulateur.Simulateur.main(Simulateur.java:218)

第 218 行用于:for(Request r : Sys.queue) 并且 Sys.queue 是一个 ArrayList

    //*************** DispatchRequest ***************
if(!Sys.queue.isEmpty())
{
algo = new SortingAlgo(Sys.queue, clock);
Sys.queue = algo.sorted_queue;
for(Request r : Sys.queue)
{
{
for(Porter p : p_i.porList)
{

if(p.p_state.equals("Available"))
{
...
...
Sys.queue.remove(r);
}
}
}
}
}

最佳答案

在代码的这一部分中:

for(Request r : Sys.queue)
{
{
for(Porter p : p_i.porList)
{

if(p.p_state.equals("Available"))
{
...
...
Sys.queue.remove(r);
}
}
}
}

您的 for 循环正在迭代 Sys.queue 的元素,同时通过调用 Sys.queue.remove 修改变量的内容(r);

您可以通过在单独的列表/队列中跟踪要删除的元素,然后使用 removeAll(...) 来解决此问题。 ArrayList的方法

例如:

for(Request r : Sys.queue)
{
{
for(Porter p : p_i.porList)
{

if(p.p_state.equals("Available"))
{
...
...
itemsToRemove.add(r);
}
}
}
}
Sys.queue.removeAll(itemsToRemove);

关于java - Java 8 中线程 "main"java.util.ConcurrentModificationException 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com