我正在尝试遍历一个线程上的循环,如下所示:
for (UnitTask task : chain) {
g.drawLine((int) task.getLocation().getX(), (int) task.getLocation().getY(), (int) currentPos.getX(), (int) currentPos.getY());
g.fillOval((int) task.getLocation().getX() - 2, (int) task.getLocation().getY() - 2, 5, 5);
currentPos = task.getLocation();
}
但是,我有另一个线程(Swing 事件线程)可以添加到这个对象。因此,ConcurrentModificationException
。我尝试通过用 包围代码来获得锁synchronized (chain) { ... }
,但我仍然得到错误。
作为一个Java同步新手,我有点困惑为什么。我希望这会使循环线程安全,但显然不是。
有趣chain
的是,它是一个自定义类的实例,但它只是一个LinkedList
. 该列表本身是私有的,外部类无法直接检索它(有显式添加/删除对象的方法),所以我不希望这会影响结果。