gpt4 book ai didi

java - Collections.sort 方法有时会在多线程环境中抛出 ConcurrentModificationException。列表未在结构上进行修改

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:01 39 4
gpt4 key购买 nike

    package CollectionsTS;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;

public class ArrayListTS {
public static void main(String[] args) {
HashSet<Integer> hset = new HashSet<Integer>();
for (int i = 0; i <= 1000; i++) {
hset.add(i);
}

MyRunnable mr = new MyRunnable();
mr.addElements(hset);

Thread t1 = new Thread(mr,"t1");
Thread t2 = new Thread(mr,"t2");
Thread t3 = new Thread(mr,"t3");

t1.start(); t2.start(); t3.start();

}
}

class MyRunnable implements Runnable {

List<Integer> ilist = new ArrayList<Integer>();

public void addElements(HashSet<Integer> hset) {
ilist.addAll(hset);
}

@Override
public void run() {
Collections.sort(ilist);
if (ilist.size() > 0)
System.out.println( Thread.currentThread().getName() +" = "+ilist.get(ilist.size() - 1));
else
System.out.println("List is empty");
}
}

抛出的异常是 ConcurrentModificationException ,我想知道代码没有修改列表(不是结构上的)。

Exception in thread "t1" t3 = 1000
Exception in thread "t2" java.util.ConcurrentModificationException
at java.util.ArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at CollectionsTS.MyRunnable.run(ArrayListTS.java:37)
at java.lang.Thread.run(Unknown Source)
java.util.ConcurrentModificationException
at java.util.ArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at CollectionsTS.MyRunnable.run(ArrayListTS.java:37)
at java.lang.Thread.run(Unknown Source)

我有返回列表中最大值的方法,我不想使用 Collections.max(),我想借助 collections.sort 方法对多线程环境中的列表进行排序。

Collections.sort 方法有时会在多线程环境中抛出 ConcurrentModificationException。列表未在结构上进行修改。

谁能帮我解决这个问题?

最佳答案

您已经创建了一个 MyRunnable 实例,它有一个 ArrayList 作为成员变量。然后在 3 个单独的线程中尝试对 ArrayList 进行排序。调用 sort 将在结构上修改列表。这就是它导致 ConcurrentModificationException 的原因。

关于java - Collections.sort 方法有时会在多线程环境中抛出 ConcurrentModificationException。列表未在结构上进行修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29359791/

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