黑马程序员技术交流社区
标题:
线程锁同步问题,报错了 ,求解
[打印本页]
作者:
高梦晓
时间:
2013-4-18 13:19
标题:
线程锁同步问题,报错了 ,求解
代码如下:
/**
* 被打的人
*
* @author zhaozhantao@21cn.com
*
*/
public class ManBall extends Spirit {
/**
* 能被碰撞的东西
*/
private List<Collideable> collideables = new ArrayList<Collideable>();
@Override
public void move(float x, float y) {
if (collideListener != null) {
synchronized (collideables) {
if (collideables != null) {
for (Collideable collideable : collideables) {
if (collideable.checkCollide(this, (int) x, (int) y)) {
CollideEvent collideEvent = new CollideEvent();
collideEvent.setCollideable(collideable);
collideListener.onCollide(collideEvent);
}
}
}
}
}
super.move(x, y);
}
/**
* 添加一个要被检测的可碰撞的东西
*
* @param collideable
*/
public void addCollideable(Collideable collideable) {
synchronized (collideables) {
collideables.add(collideable);
}
}
/**
* 删除一个要被检测的可碰撞的东西
*
* @param collideable
*/
public void removeCollideable(Collideable collideable) {
synchronized (collideables) {
collideables.remove(collideable);
}
}
}
复制代码
三个主要的方法,分别是move,add,remove
move里面遍历了这个集合
add和remove分别是对这个集合的增加删除操作
我都加了synchronized (collideables)
不知道是不是这样写,反正是执行remove的时候报了这样的一个错
java.util.ConcurrentModificationException
作者:
曹德君
时间:
2013-4-26 09:46
本帖最后由 曹德君 于 2013-4-26 09:48 编辑
代码不全。能补全代码不,调用看看。这个异常是,当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2