相关疑难解决方法(0)

为什么Iterator.next()抛出ConcurrentModificationException

勉强的是,这段小代码抛出了上面提到的Exception.另外,查看网络上发布的代码似乎是正确的:

import java.util.ArrayList;
import java.util.Iterator;

public class IteratorTest {

    ArrayList<Integer> arr = new ArrayList<Integer>();

    Iterator i = arr.iterator();

    public void show() {
        arr.add(2);
        arr.add(5);
        arr.add(9);

        while(i.hasNext()){
            System.out.println(i.next());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢

java iterator while-loop

15
推荐指数
2
解决办法
1万
查看次数

如何避免ConcurrentModificationException kotlin

我有一个帐户列表,当我进行长按时,我想从arraylist中删除该项目.我正在尝试从alertdialog中删除它,但我得到了ConcurrentModificationException.这是崩溃的地方:

listAccounts.forEachIndexed { index, account ->
            if (idParamether == account.id) {
                listAccounts.remove(account)
            }
        }
Run Code Online (Sandbox Code Playgroud)

kotlin

15
推荐指数
6
解决办法
6941
查看次数

如何调试ConcurrentModificationException?

我遇到了ConcurrentModificationException,通过查看它我看不出它为什么会发生的原因; 抛出异常的区域和修改集合的所有位置都被包围

synchronized (this.locks.get(id)) {
  ...
} // locks is a HashMap<String, Object>;
Run Code Online (Sandbox Code Playgroud)

我试图抓住讨厌的线程,但我可以钉(通过在异常中设置一个断点)是抛出线程拥有监视器而另一个线程(程序中有两个线程)休眠.


我该怎么办?当遇到类似的线程问题时,您通常会做什么?

java concurrency multithreading exception

13
推荐指数
3
解决办法
2万
查看次数

Java list的.remove方法仅适用于每个循环内部的倒数第二个对象

我看到一种奇怪的行为.

    List<String> li = new ArrayList<>();
    li.add("a");
    li.add("b");
    li.add("c");
    li.add("d");
    li.add("e");
    for(String str:li){
        if(str.equalsIgnoreCase("d")){
            li.remove(str);     //removing second last in list works fine
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试删除列表中的第二个以外的任何其他,我得到ConcurrentModificationException.在阅读"Oracle认证助理Java SE 7程序员学习指南2012"时,我注意到它错误地假设.remove()始终使用删除列表中倒数第二个的示例.

java foreach

10
推荐指数
2
解决办法
3879
查看次数

Guava MultiMap和ConcurrentModificationException

我不明白为什么在迭代这个时我得到一个ConcurrentModificationException multimap.我读了以下条目,但我不确定我是否理解了整个事情.我试图添加一个synchronized块.但我怀疑的是与什么同步,何时.

multimap是一个字段,创建如下:

private Multimap<GenericEvent, Command> eventMultiMap =   
   Multimaps.synchronizedMultimap(HashMultimap.<GenericEvent, Command> create());
Run Code Online (Sandbox Code Playgroud)

并像这样使用:

eventMultiMap.put(event, command);
Run Code Online (Sandbox Code Playgroud)

并且像这样(我试图在地图上同步这部分,但没有成功)

for (Entry<GenericEvent, Command> entry : eventMultiMap.entries()) {
    if (entry.getValue().equals(command)) {
        eventMultiMap.remove(entry.getKey(), entry.getValue());
        nbRemoved++;
    }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multimap guava concurrentmodification

9
推荐指数
3
解决办法
6766
查看次数

迭代时出现Java"ConcurrentModificationException"运行时错误.next()

根据运行时错误消息,异常发生在以下行中;

VirusData v = iteratorVirusDB.next();
Run Code Online (Sandbox Code Playgroud)

VirusData 是一个带有构造函数和重载构造函数的类,其中包含有关数据库中每种病毒的特定信息,例如;

  • 字符串vName
  • 字符串vDefinition

重载

  • 具有标记化定义的数组(以xLength分组分隔)
  • 带LCS令牌的数组
  • 漂浮等级

iteratorVirusDBtype <VirusData>是.iterator()VirusDB,如下所示:

Iterator<VirusData> iteratorVirusDB = virusDB.iterator();
Run Code Online (Sandbox Code Playgroud)

VirusDBis和ArrayList的类型<VirusData>,我存储病毒对象(此时名称和def),以便我以后可以使用它们.

ArrayList <VirusData> virusDB = new ArrayList<VirusData>();
Run Code Online (Sandbox Code Playgroud)

最后,在使用上述所有解释的方法中发生错误:

private void selectDabataseMouseClicked(java.awt.event.MouseEvent evt) {
    while(iteratorVirusDB.hasNext()) {
        VirusData v = iteratorVirusDB.next();               //ERROR LINE
        String vSig = v.signature;                              
        v.tokens = tokenize.raw(vSig, true, tLength);
        ...
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)

我可以真正做一些帮助和建议,如何解决这个问题,以使程序成功运行.Bellow,完整的StackTrace:

run:
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
        at java.util.AbstractList$Itr.next(AbstractList.java:343)
        at project_clean.Main.selectDabataseMouseClicked(Main.java:275)
        at project_clean.Main.access$100(Main.java:11)
        at project_clean.Main$2.mouseClicked(Main.java:76)
        at …
Run Code Online (Sandbox Code Playgroud)

java iterator runtime-error exception arraylist

9
推荐指数
1
解决办法
4707
查看次数

Java:迭代列表时出现ConcurrentModificationException

当我执行以下代码时,我得到ConcurrentModificationException

 Collection<String> myCollection = Collections.synchronizedList(new ArrayList<String>(10));
    myCollection.add("123");
    myCollection.add("456");
    myCollection.add("789");
    for (Iterator it = myCollection.iterator(); it.hasNext();) {
        String myObject = (String)it.next();
        System.out.println(myObject);
        myCollection.remove(myObject); 
        //it.remove();
    }
Run Code Online (Sandbox Code Playgroud)

为什么我得到异常,即使我使用Collections.synchronizedList?

当我将myCollection更改为

  ConcurrentLinkedQueue<String> myCollection = new ConcurrentLinkedQueue<String>();
Run Code Online (Sandbox Code Playgroud)

我没有得到那个例外.

java.util.concurrent中的ConcurrentLinkedQueue与Collections.synchronizedList有何不同?

java collections

8
推荐指数
2
解决办法
1万
查看次数

添加另一个对象时java.util.ConcurrentModificationException

我正在遭遇这个例外.我的代码有什么问题?我只想将Person的重复名称分开ArrayList

public class GlennTestMain
{

    static ArrayList<Person> ps;

    static ArrayList<Person> duplicates;
    public static void main(String[] args)
    {
        ps = new ArrayList<GlennTestMain.Person>();

        duplicates = new ArrayList<GlennTestMain.Person>();

        noDuplicate(new Person("Glenn", 123));
        noDuplicate(new Person("Glenn", 423));
        noDuplicate(new Person("Joe", 1423)); // error here


        System.out.println(ps.size());
        System.out.println(duplicates.size());
    }

    public static void noDuplicate(Person p1)
    {
        if(ps.size() != 0)
        {
            for(Person p : ps)
            {
                if(p.name.equals(p1.name))
                {
                    duplicates.add(p1);
                }
                else
                {
                    ps.add(p1);
                }
            }
        }
        else
        {
            ps.add(p1);
        }
    }

    static class Person
    {
        public Person(String n, int num) …
Run Code Online (Sandbox Code Playgroud)

java

8
推荐指数
2
解决办法
2万
查看次数

如何从Java中的ArrayList中删除对象?

我有一个ArrayList包含一些对象,例如User,每个对象都有一个namepassword属性.如何仅删除User具有特定"名称" 的对象ArrayList

java arraylist

7
推荐指数
5
解决办法
5万
查看次数

SynchronizedMap ConcurrentModificationException

我试图了解 SynchronizedMap 并运行以下代码。我得到以下输出,但有一个例外。根据我的理解,当线程仍在对映射执行写入或线程处于睡眠状态时,get() 方法尝试访问同步映射时会导致异常。我的理解是正确的还是我遗漏了什么?

class MapHelper1 implements Runnable {
Map<String, Integer> map;

public MapHelper1(Map<String, Integer> map) {
    this.map = map;
    new Thread(this, "MapHelper1").start();
}

public void run() {
    map.put("One", 1);
    try {
        System.out.println("MapHelper1 sleeping");
        Thread.sleep(100);
    } catch (Exception e) {
        System.out.println(e);
    }

}
}

class MapHelper2 implements Runnable { 
Map<String, Integer> map;

public MapHelper2(Map<String, Integer> map) {
    this.map = map;
    new Thread(this, "MapHelper3").start();
}

public void run() {
    map.put("two", 1);
    try {
        System.out.println("MapHelper2 sleeping");
        Thread.sleep(100);
    } catch (Exception e) { …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading synchronization

6
推荐指数
1
解决办法
1439
查看次数