LinkedList checkFor java compilation error

Okay, so I'm trying to make the method “start” the process for a given amount of “time”, so that all the seams work to some extent, but it continues to give away these emotions. This is the first exception he gives.

Exception in thread "main" java.util.ConcurrentModificationException 

and then in exicutio he gives it

  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) 

I don’t know what I am doing wrong, I suppose to do it at the same time or something else? If so, how? I thought the linked list was synchronous? it may be that where I ruined it.

Well, anyway, this is a method that uses:

  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; } 

and here I call it the main method

  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,qTwo, qThree, qFour, currentTime); robin = 3; break; case 3 : runQueueThree(qOne,qTwo, qThree, qFour, currentTime); robin = 4; break; case 4 : runQueueFour(qOne,qTwo, qThree, qFour, currentTime); robin = 1; break; } } 

thanks for any help with this

+6
source share
2 answers

- . You access and change the assembly at the same time, which cannot be done directly because of each cycle.

- Use Iterator to solve this problem.

 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. } } 
+8
source

A ConcurrentModificationException occurs when you try to remove an item from a list while iterating through it using a for loop.

I assume your error comes from these lines -

 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; } } 

To fix the error, use the iterator.remove () method

+4
source

All Articles