ConcurrentModificationException尽管使用了迭代器

ConcurrentModificationException尽管使用了迭代器,exception,iterator,concurrentmodification,Exception,Iterator,Concurrentmodification,我正在使用以下类: public class Ticker implements Runnable { private LinkedList<Timeable> timeables = new LinkedList<>(); @Override public void run() { ListIterator<Timeable> it = timeables.listIterator(); while (it.hasNext()) {

我正在使用以下类:

public class Ticker implements Runnable {

private LinkedList<Timeable> timeables = new LinkedList<>();

@Override
public void run() {

    ListIterator<Timeable> it = timeables.listIterator();
    while (it.hasNext()) {
        it.next().tick();
    }
}

public void add(Timeable timeable) {
    timeables.add(timeable);
}

public void remove(Timeable timeable) {
    timeables.remove(timeable);
}
公共类Ticker实现可运行{
私有LinkedList timeables=新LinkedList();
@凌驾
公开募捐{
ListIterator it=timeables.ListIterator();
while(it.hasNext()){
it.next().tick();
}
}
公共无效添加(可定时){
timeables.add(timeable);
}
公共无效删除(可定时){
timeables.remove(timeable);
}
}

我以为迭代器会阻止ConcurrentModificationException,但它会在“it.next().tick();”上抛出一个


如何解决这个问题?

java集合类故障很快,因此
LinkedList
将抛出一个
ConcurrentModificationException
,如果它的结构被一个线程修改,而另一个线程正在迭代它的元素


对于多线程代码,您应该使用线程安全的集合,例如
CopyOnWriteArrayList
(在某个时间点提供集合的故障安全迭代器)或
concurrentlinkedeque
(如果您只需要访问第一个或最后一个元素)。

单击()方法中的代码是什么?显示导致列表更改的任何嵌套调用