java线程锁同步问题,刚接触线程锁,出错了,代码很少,请看
[code=java
/**
* 被打的人
*
* @author zhaozhantao@21cn.com
*
*/
public class ManBall extends Spirit {
/**
* 能被碰撞的东西
*/
private List<Collideable> collideables = new ArrayList<Collideable>();
@Override
public void move(float x, float y) {
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);
}
][/code]
[解决办法]
你看看
在执行for (Collideable collideable : collideables) {}的时候
里面的代码,比如
collideEvent.setCollideable(collideable);
collideListener.onCollide(collideEvent);
这两句会不会去调用addCollideable或者removeCollideable
或者对collideables执行其他删除、添加元素的方法。
在你遍历的时候collideables,如果有这种操作,就会产生java.util.ConcurrentModificationException
这个我以前碰到过。
[解决办法]