好吧,我在这里尝试做的是让一个方法“运行”一个给定量的“时间”的过程,这个所有接缝在一定程度上工作,但它不断给出这些例子.
这是它给出的第一个执行
这是它给出的第一个执行
- 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;
- }
- 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.
- }
- }