我在做一个采用优先权算法模拟处理机调度的实验。
自定义了一个PCB类存放进程的这些信息:
进程ID
优先权
CPU时间(要求运行时间)
状态(就绪、运行、终止)
然后用一个TreeSet类的treeset存放进程的队列。
Iterator iter = treeset.iterator();
while(iter.hasNext()){
PCB pcb = (PCB)iter.next();
if(pcb.time == 0){
pcb.state = "终止";
/*********加了下面这句就会报错**************/
//treeset.remove(pcb); //从就绪队列(已按优先权排序)中选一个进程运行
Iterator iterTemp = treeset.iterator();
while(iterTemp.hasNext()){
PCB pcbTemp = (PCB)iterTemp.next();
if(pcbTemp.state == "就绪"){
pcbTemp.state = "运行";
break;
}
}
}
//进程运行:优先权-1,运行时间-1
if(pcb.state == "运行"){
pcb.weight--;
pcb.time--;
}}
为什么
/*********加了下面这句就会报错**************/
//treeset.remove(pcb);
报的是Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
自定义了一个PCB类存放进程的这些信息:
进程ID
优先权
CPU时间(要求运行时间)
状态(就绪、运行、终止)
然后用一个TreeSet类的treeset存放进程的队列。
Iterator iter = treeset.iterator();
while(iter.hasNext()){
PCB pcb = (PCB)iter.next();
if(pcb.time == 0){
pcb.state = "终止";
/*********加了下面这句就会报错**************/
//treeset.remove(pcb); //从就绪队列(已按优先权排序)中选一个进程运行
Iterator iterTemp = treeset.iterator();
while(iterTemp.hasNext()){
PCB pcbTemp = (PCB)iterTemp.next();
if(pcbTemp.state == "就绪"){
pcbTemp.state = "运行";
break;
}
}
}
//进程运行:优先权-1,运行时间-1
if(pcb.state == "运行"){
pcb.weight--;
pcb.time--;
}}
为什么
/*********加了下面这句就会报错**************/
//treeset.remove(pcb);
报的是Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货