package 调度算法2;//注意文件名,需与自己创建的一致
public class Shijianpian {//注意类名,需与自己创建的一致
static int a1=0,b1=0,c1=0,d1=0;//作为是否在运行的标志
public static void main(String[] args) {
String name[]= {" 进程名", " 到达时间", " 运行时间", " 优先级"};
for(int i=0;i<name.length;i++){
System.out.print(name[i]);
}
System.out.println();
int a[][]= {{1,3,5,2},{2,11,8,4},{3,13,3,3},{4,15,4,1}}; //创建并输出数据 。注意赋值时按照到达时间由短到长排序
for(int j=0;j<a.length;j++){
for(int i=0;i<a[j].length;i++){
System.out.print( " "+ a[j][i]);
}
System.out.println();
}
int nt=0;//nt才是真正的时间!!!!!!
int nt1=0,nt2=0,nt3=0,nt4=0;//记录运行时间
int ci=0;//记录已经运行多少个进程
int sh=0;//初始化方法的返回值
for(int t=0;t<=30;t++){//利用for循环模拟时间流动
sh=name(a[0][1],a[1][1],a[2][1],a[3][1],nt);//1
if(a1==1) {
System.out.println(nt+"时正在运行进程"+a[0][0]+" ");
try {//使每次循环停顿1秒
Thread.sleep(1000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
nt=nt+1;//时间增加1个时间片
nt1=nt1+1;//记录运行时间
}
if(nt1==a[0][2] && a1==1){ //运行完毕
System.out.println(nt+"时结束运行进程"+a[0][0]);
ci=ci+1;//记录已经运行多少个进程
a1=0;//置0,说明程序结束
}
sh=name(a[0][1],a[1][1],a[2][1],a[3][1],nt);//2
if(b1==1) {
System.out.println(nt+"时正在运行进程"+a[1][0]+" ");
try {//使每次循环停顿1秒
Thread.sleep(1000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
b1=1;
nt=nt+1;
nt2=nt2+1;
}
if(nt2==a[1][2] && b1==1){
System.out.println(nt+"时结束运行进程"+a[1][0]);
ci=ci+1;
b1=0;
}
sh=name(a[0][1],a[1][1],a[2][1],a[3][1],nt);//3
if(c1==1) {
System.out.println(nt+"时正在运行进程"+a[2][0]+" ");
try {//使每次循环停顿1秒
Thread.sleep(1000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
nt=nt+1;
nt3=nt3+1;
}
if(nt3==a[1][2] && c1==1){
System.out.println(nt+"时结束运行进程"+a[2][0]);
ci=ci+1;
c1=0;
}
sh=name(a[0][1],a[1][1],a[2][1],a[3][1],nt);//4
if(d1==1) {
System.out.println(nt+"时正在运行进程"+a[3][0]+" ");
try {//使每次循环停顿1秒
Thread.sleep(1000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
nt=nt+1;
nt4=nt4+1;
}
if(nt4==a[3][2] && d1==1){
System.out.println(nt+"时结束运行进程"+a[3][0]);
ci=ci+1;
d1=0;
}
if(a1==0 && b1==0 && c1==0 && d1==0) {
System.out.println(nt+"时没有进程运行");
try {//使每次循环停顿1秒
Thread.sleep(1000);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
nt=nt+1;
}
if(ci == a[3][0]){ //记录结束的进程数等于最后进程号时,结束循环
System.out.println("所有程序已全部运行完毕");
break;
}
}
}
public static int name(int a,int b,int c,int d,int nt)//自定义的求阶乘的函数
{
if(a==nt){ //1
System.out.println(nt+"时进程"+1+"就绪");
a1=1;
return a;
}
if(b==nt){ //2
System.out.println(nt+"时进程"+2+"就绪");
b1=1;
return b;
}
if(c==nt){ //3
System.out.println(nt+"时进程"+3+"就绪");
c1=1;
return c;
}
if(d==nt){ //4
System.out.println(nt+"时进程"+4+"就绪");
d1=1;
return d;
}
return 0;
}
}
Java时间片轮转(简单模拟实现,适合初学者)
最新推荐文章于 2024-04-23 12:03:39 发布