好的,所以我在这里尝试做的是让一个方法在给定的“时间”内“运行”一个过程,这一切都在一定程度上起作用,但它不断给出这些感觉。这是它给出的第一个例外
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, 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;
}
}