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时间片轮转(简单模拟实现,适合初学者)
猜你喜欢
转载自blog.csdn.net/gayhang/article/details/80415532
今日推荐
周排行