黑马程序员技术交流社区

标题: 线程锁同步问题,报错了 ,求解 [打印本页]

作者: 高梦晓    时间: 2013-4-18 13:19
标题: 线程锁同步问题,报错了 ,求解
代码如下:


  1. /**
  2. * 被打的人
  3. *
  4. * @author zhaozhantao@21cn.com
  5. *
  6. */
  7. public class ManBall extends Spirit {

  8.        

  9.         /**
  10.          * 能被碰撞的东西
  11.          */
  12.         private List<Collideable> collideables = new ArrayList<Collideable>();

  13.        
  14.         @Override
  15.         public void move(float x, float y) {
  16.                 if (collideListener != null) {
  17.                         synchronized (collideables) {
  18.                                
  19.                                 if (collideables != null) {
  20.                                         for (Collideable collideable : collideables) {
  21.                                                 if (collideable.checkCollide(this, (int) x, (int) y)) {
  22.                                                         CollideEvent collideEvent = new CollideEvent();
  23.                                                         collideEvent.setCollideable(collideable);
  24.                                                         collideListener.onCollide(collideEvent);
  25.                                                 }
  26.                                         }
  27.                                 }
  28.                         }
  29.                 }
  30.                 super.move(x, y);
  31.         }
  32.        
  33.         /**
  34.          * 添加一个要被检测的可碰撞的东西
  35.          *
  36.          * @param collideable
  37.          */
  38.         public void addCollideable(Collideable collideable) {
  39.                 synchronized (collideables) {
  40.                         collideables.add(collideable);
  41.                 }
  42.         }
  43.         /**
  44.          * 删除一个要被检测的可碰撞的东西
  45.          *
  46.          * @param collideable
  47.          */
  48.         public void removeCollideable(Collideable collideable) {
  49.                 synchronized (collideables) {
  50.                         collideables.remove(collideable);
  51.                 }
  52.         }

  53.        
  54. }


复制代码
三个主要的方法,分别是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