男* * *靜態無效主(string [] args){
MyQueue的新MyQueue的();//聲明隊列
印刷電路板[PCB = {新PCB (001,8,1),新PCB(002,7,9),新PCB(003,3,8),新PCB(004,1,7),新PCB。
& gtPCB段=新PCB();
(INT I = 0;& ltpcb .長度;++){//先初始化排序,選擇排序。這裏用的是優先級高的壹線隊。
(J =我;& ltpcb .長度;J + +){
(多氯聯苯[壹]).特權
segment = PCB[1];
PCB[I]= PCB[J];
PCB[J]= segment;
}
}
}
系統。通過out.println("加入隊列後第壹次的進程順序:");
(INT I = 0;& ltpcb .長度;+ +){
System.out調用println(第壹個入隊#程序名:"+PCB [me]"。Name+totaltime:"+ PCB [I] I]。total time+的特權+PCB [me]。特權);}
();
my queue . start(PCB);
}
}
類MyQueue的{
INT index = 0;
PCB [] PC =新PCB[5];
PCB [] PC1 =新PCB[4];
PCB溫度=新PCB() BR />公共* * *無效排隊(PCB進程){//排隊算法
(指數== 5){
(“出界!”);
返回
}
PC [index] =進程;
指數++;
}
男* * *:PCB dequeue(){//出列算法(index == 0)
返回null
(INT I = 0;& ltPC 1 . length;+ +){
PC 1[I]= PC[+1];
}
索引-
溫度= PC[0];
(INT I = 0;& ltPC 1 . length;+ +){ BR />PC[I]= PC 1[I];
}
退貨條件;
}
無效啟動(PCB[]PC){//進程表算法
(PC [0].IsNotFinish = = true | | PC[1 IsNotFinish = = true | | PC[2 IsNotFinish = = true | | PC]。當isNotFinish == true | | PC [4]。isNotFinish ==){
//*註意:||運算符全部為假,所有表達式結果為假,否則為真。
(INT I = 0;& ltPC長度;+ +){
PC [I].跑(這個);/& gt;}的system . out . println();
(INT I = 0;& ltpc .長度;++){//處理運行壹次的每個時間片的長度。先重新訂購壹次。
(J =我;& ltpc .長度;J + +){
If (PC [I]特權
溫度= PC[I];
PC[I]= PC[J];
PC [J] =溫度;
}
}
}
}
}
}
PCB類{//聲明進程級別。
和int name,totaltime,運行時特權;
Boolean isNotFinish
公共PCB(){
}
暴露PCB(名稱,totaltime特權的解釋){
this.name =的名稱;//進程名稱
this . total time = total time;/ /
This.privilege =特權;//總時間優先this . runtime = 2;//時間片值為2
This.isNotFinish = true//執行是否完成?
(“初始值:程序名:“+name+”+“total time:“+total time+”privilege”+privilege);
體制外的。調用println();
}
壹種基於MyQueue的MQ無效run(){//處理的時間片算法。
(總時間& gt1){ total time = run;//總時間大於1,總時間=總時間-時間片。
特權-
(“程序名稱:“+名稱+”剩余時間:“++”特權“+特權”);總時間
Elseif (totaltime = = 1) {
total time-;//總時間為1時,執行時間為1。
& gt特權-
(“程序名:"+名稱+"+"剩余時間:"+總時間+時間+"特權"+特權);
}其他{
IsNotFinish = false//0,將isNotFinish標誌設置為false。
}
if(isNotFinish = = true){ br MQ . dequeue();
MQ . enqueue(Ben);
}
}
}