Java实现优先数调度算法

学艺不精,望大佬指正!

第一题:设计一个按优先数调度算法实现处理器调度的程序。

import java.util.*;
public class Main {

	public static void main(String[] args) {
		method me=new method();
		me.input();
		me.run();
		System.out.println("............................");
	}

}

class pcb{
	private String name;
	private String status;
	private int time;
	private int priorty;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public int getTime() {
		return time;
	}
	public void setTime(int time) {
		this.time = time;
	}
	public int getPriorty() {
		return priorty;
	}
	public void setPriorty(int priorty) {
		this.priorty = priorty;
	}
}

class method{
	ArrayList <pcb> al=new ArrayList<pcb>();
	
	public void input(){
		Scanner in=new Scanner(System.in);
		for(int i=0;i<2;i++){
			System.out.println("请输入PCB["+(i+1)+"]  name  time  priority");
			pcb p=new pcb();
			p.setName(in.next());
			int n1=(int)(Math.random()*10);
			int n2=(int)(Math.random()*10);
			p.setTime(n1);
			p.setPriorty(n2);
			p.setStatus("ready");
			al.add(p);
		}
	}
        //获取优先权最大的进程
	public int getMax(List<pcb> li){
		int max=0;
		int i=0;
		int k=0;
		Iterator <pcb>it=li.iterator();
		while(it.hasNext()){
			pcb p=(pcb)it.next();
			if(p.getPriorty()>max){
				max=p.getPriorty();
				k=i;
			}
			i++;
		}
		return k;
	}
       //运行后进程优先权-1
	public void renew(pcb p){
		if(p.getPriorty()!=0)
			p.setPriorty(p.getPriorty()-1);
		else
			p.setPriorty(0);
	}
	
	public void show(){
		Iterator <pcb> it=al.iterator();
		while(it.hasNext()){
			pcb p=it.next();
			System.out.println("              "+p.getName()+"      "+p.getTime()+"      "+p.getPriorty()+"      "+p.getStatus());
		}
		System.out.println();
	}
	public void run(){
		while(al.size()!=0){
			int max=getMax(al);
			pcb p=al.get(max);
			if((p.getTime()-1)!=0){
				p.setStatus("working");
				p.setTime(p.getTime()-1);
				show();
				p.setStatus("ready");
			}
			else{
				p.setStatus("End");
				p.setTime(p.getTime()-1);
				show();
				p.setStatus("ready");
			}
			renew(p);
			al.set(max, p);
			if(p.getTime()<=0){
				System.out.println("              进程"+p.getName()+"结束");
				al.remove(max);
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/kwj1999999/article/details/80370206