加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

LinkedList checkForComodification错误java

发布时间:2020-12-15 00:42:16 所属栏目:Java 来源:网络整理
导读:好吧,我在这里尝试做的是让一个方法“运行”一个给定量的“时间”的过程,这个所有接缝在一定程度上工作,但它不断给出这些例子. 这是它给出的第一个执行 Exception in thread "main" java.util.ConcurrentModificationException 然后在exicutio它给出了这个 a
好吧,我在这里尝试做的是让一个方法“运行”一个给定量的“时间”的过程,这个所有接缝在一定程度上工作,但它不断给出这些例子.
这是它给出的第一个执行
Exception in thread "main" java.util.ConcurrentModificationException

然后在exicutio它给出了这个

at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:761)
at java.util.LinkedList$ListItr.next(LinkedList.java:696)
at parta.PartA.runQueueOne(PartA.java:273)

我不知道我在做错了什么我觉得这个并发或什么?如果是这样的话?我认为链表本质上是同步的?也许那就是我搞砸了.

那么这里的任何方式是我使用的方法:

public static void runQueueOne(LinkedList<MyProcess> q1,LinkedList<MyProcess> q2,LinkedList<MyProcess> q3,LinkedList<MyProcess> q4,int ct)
{
     System.out.println("Running Level One Queue");


     for(MyProcess p : q1)
     {
         if(p.name.equalsIgnoreCase(q1.getFirst().name))
         {
             //add 3 millsedonds to the service time
             q1.getFirst().serviceTimeTotal += 3;
             System.out.println(q1.getFirst().name + " is running");

         }else
         {
             //add 3 millseconds to wait time fr the un busy one
             p.waitTimeTotal+=3;
         }
     }

      for(MyProcess p : q2)
     {
         p.waitTimeTotal+=3;
     }
      for(MyProcess p : q3)
     {
         p.waitTimeTotal+=3;
     }
      for(MyProcess p : q4)
     {
         p.waitTimeTotal+=3;
     }

     //calculate all the priority
     for(MyProcess p : q1)
     {
         p.calculatePriority();
         switch(p.priority)
         {
             case 1: break;
             case 2: q1.remove(p); q2.add(p); break;
             case 3: q1.remove(p); q3.add(p); break;
             case 4: q1.remove(p); q4.add(p); break;
         }

     }
     ct += 3;
}

这是我在main方法中调用它的地方

while(!allProcessDone)
    {
        //arrival queue
        for(MyProcess p :al )
        {
          addToQueue(qOne,p,currentTime);

        //cheack to see if all the processes are done
        if(p1.isDone == true &
           p2.isDone == true &
           p3.isDone == true &
           p4.isDone == true &
           p5.isDone == true &
           p6.isDone == true &
           p7.isDone == true &
           p8.isDone == true &
           p9.isDone == true &
           p10.isDone == true )
        {
            //end the loop
            allProcessDone = true;
            System.out.println("All proccess have been completed");
            break;
        }



        switch (robin)
        {
            case 1: runQueueOne(qOne,qTwo,qThree,qFour,currentTime); robin = 2;
                break;
            case 2: runQueueTwo(qOne,currentTime); robin = 3;
                break;
            case 3 : runQueueThree(qOne,currentTime); robin = 4; 
                break;
            case 4 :  runQueueFour(qOne,currentTime); robin = 1;
                break;

        }
    }

感谢您对此的任何帮助

解决方法

– 您正在同时访问和修改Collection,这不能直接从for-Each循环完成.

– 使用迭代器解决此问题.

LinkedList<MyProcess> q1 = new LinkedList<MyProcess>();

Iterator<MyProcess> iterator = q1.iterator();

while (iterator.hasNext()){

         MyProcess mp = iterator.next();

         if (mp.name.equals("xyz")){

             iterator.remove();    // You can do the modification here.
         }


 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读