Java时间片轮转(简单模拟实现,适合初学者)

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;
			
        }  
        
}

猜你喜欢

转载自blog.csdn.net/gayhang/article/details/80415532
今日推荐