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
(如果您只需要访问第一个或最后一个元素)。单击()方法中的代码是什么?显示导致列表更改的任何嵌套调用