gpt4 book ai didi

java - LinkedList 中的 ConcurrentModificationException

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:40 25 4
gpt4 key购买 nike

我正在尝试设计一种将流程图转换为 Java 或任何其他代码的软件。但是我反复收到 ConcurrentModificationException ..但是我不能使用 boolean 值来防止并发修改,因为对链表的访问发生在不同的地方。

因此,作为解决方案,我创建了以下适配器类。但是,它也会从 next 方法中抛出相同的异常。有没有其他解决方案,或者如果可以,请让我知道如何修改我的代码...

非常感谢...

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListAdapter<T> extends LinkedList<T>{

@Override
public boolean add(T t){

boolean b;

synchronized(this){
b = super.add(t);
}

return b;
}

@Override
public T remove(){

T t;

synchronized(this){
t = super.remove();
}

return t;
}

@Override
public Iterator<T> iterator(){

final LinkedListAdapter<T> adap = this;

return
new Iterator<T>(){

private Iterator<T> iter;

{
synchronized(adap){
iter = LinkedListAdapter.this.getIterator();
}
}

@Override
public boolean hasNext() {

boolean b;

synchronized(adap){
b = iter.hasNext();
}

return b;
}

@Override
public T next() {

T t;

synchronized(adap){
t = iter.next();
}

return t;
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}

protected Iterator<T> getIterator() {

Iterator<T> iter;

synchronized(this){
iter = super.iterator();
}

return iter;
}
}

最佳答案

ConcurrentModificationException 通常在遍历列表时抛出,同时通常另一个线程甚至同一个循环试图修改(添加/删除)列表的内容。

关于java - LinkedList 中的 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12410093/

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