栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java模拟进程调度(优先级调度,时间片轮转调度)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java模拟进程调度(优先级调度,时间片轮转调度)

进程实体类:

public class Jincheng {
    private String name;
    private int youxian;
    private int time;
    private String zhuangtai;
    private String zhizhen;
    private ArrayList ziyuan;


    @Override
    public String toString() {
        return "进程{" +
                "进程名='" + name + ''' +
                ", 优先级=" + youxian +
                ", 运行时间=" + time +
                ", 进程状态='" + zhuangtai + ''' +
                ", 指针='" + zhizhen + ''' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getYouxian() {
        return youxian;
    }

    public void setYouxian(int youxian) {
        this.youxian = youxian;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }

    public String getZhuangtai() {
        return zhuangtai;
    }

    public void setZhuangtai(String zhuangtai) {
        this.zhuangtai = zhuangtai;
    }

    public String getZhizhen() {return zhizhen;}

    public void setZhizhen(String zhizhen) {this.zhizhen = zhizhen;}

    public ArrayList getZiyuan() {
        return ziyuan;
    }

    public void setZiyuan(ArrayList ziyuan) {
        this.ziyuan = ziyuan;
    }
}

进程操作方法,主函数:进程创建、阻塞、唤醒、终止、显示、调度

public class czxt01 {
    static ArrayList jiuxu=new ArrayList();
    static ArrayList zuse=new ArrayList();
    static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) {
        while (true) {
            System.out.println("********************");
            System.out.println("*      系统主菜单    *");
            System.out.println("********************");
            System.out.println("*       1…创建      *");
            System.out.println("*       2…阻塞      *");
            System.out.println("*       3…唤醒      *");
            System.out.println("*       4…终止      *");
            System.out.println("*       5…显示      *");
            System.out.println("*       6…调度      *");
            System.out.println("*       0…退出      *");
            System.out.println("********************");
            System.out.println("请输入您需要的功能:(0-6):");
            int x = sc.nextInt();
            if (x == 0) {
                break;
            }
            if (x == 1) {
                add();
            }
            if (x == 2) {
                zusee();
            }
            if (x == 3) {
                huanxing();
            }
            if (x == 4) {
                delete();
            }
            if (x == 5) {
                xianshi();
            }
            if(x==6){
            	if(jiuxu.size()==0){
            		System.out.println("就绪队列为空,无法执行!");
            	}
            	else{
            		scheduler.scheduler();
            	}
            }
            if(x<0||x>6){
                System.out.println("输入失败!请输入1-6之间的数字!");
            }
        }
    }
    
	//x==1
    public static void add(){
        Jincheng jc = new Jincheng();
        System.out.println("进程名:");
        jc.setName(sc.next());
        System.out.println("优先级");
        jc.setYouxian(sc.nextInt());
        System.out.println("运行时间");
        jc.setTime(sc.nextInt());
        int p=0;
        if (jiuxu.size()!=0){
            for (int i = 0; i < jiuxu.size(); i++) {
                if (jiuxu.get(i).getName().equals(jc.getName())) {
                    System.out.println("就绪队列中存在同名文件,无法添加!");
                    p++;
                    break;
                }
            }
       }
       if(p==0) {
           if (zuse.size() != 0) {
               for (int i = 0; i < zuse.size(); i++) {
                   if (zuse.get(i).getName().equals(jc.getName())) {
                       System.out.println("阻塞队列中存在同名文件,无法添加!");
                       p++;
                       break;
                   }
               }
           }
       }
        if(p==0){
            jiuxu.add(jc);
            System.out.println("添加进程成功!");
            jiuxu.get(jiuxu.size()-1).setZhuangtai("就绪");
        }
        for(int i = 0; i < jiuxu.size(); i++){
            if(i!=jiuxu.size()-1) {
                jiuxu.get(i).setZhizhen(jiuxu.get(i + 1).getName());
//                System.out.println(jiuxu.get(i));
            }
            if(i==jiuxu.size()-1&&jiuxu.size()-1>=0){
                jiuxu.get(i).setZhizhen("NULL");
//                System.out.println(jiuxu.get(i));
            }
        }
//        System.out.println("阻塞队列:");
        for(int j = 0; j < zuse.size(); j++){
            if(j!=zuse.size()-1){
                zuse.get(j).setZhizhen(zuse.get(j+1).getName());
//                System.out.println(zuse.get(j));
            }
            if(j==zuse.size()-1&&zuse.size()-1>=0){
                zuse.get(j).setZhizhen("NULL");
//                System.out.println(zuse.get(j));
            }
        }
    }
    //x==2
    public static void zusee(){
        int p=0;
        System.out.println("请输入要阻塞的进程名:");
        String cha=sc.next();
        if(jiuxu.size()<=0){
            System.out.println("请先添加进程!");
        }
        else {
            for (int j = 0; j < zuse.size(); j++) {
                if (zuse.get(j).getName().equals(cha)) {
                    System.out.println("该进程已处在阻塞状态");
                    p++;
                    break;
                }
            }
            if(p==0) {
                for (int i = 0; i < jiuxu.size(); i++) {
                    if (jiuxu.get(i).getName().equals(cha)) {
                        zuse.add(jiuxu.get(i));
                        jiuxu.get(i).setZhuangtai("阻塞");
                        jiuxu.remove(i);
                        System.out.println("进程已阻塞");
                        p++;
                        break;
                    }
                }
            }
            if (p==0) {
                System.out.println("队列中没有该进程!无法阻塞!");
            }

        }
    }
    //x==3 唤醒进程
    public static void huanxing(){
        System.out.println("请输入要唤醒的进程:");
        String huan=sc.next();
//        System.out.println("");
        if(zuse.size()==0){
            System.out.println("阻塞队列为空!无法唤醒!");
        }
        else {
            for (int i = 0; i < zuse.size(); i++) {
                if (zuse.get(i).getName().equals(huan)) {
                    zuse.get(i).setZhuangtai("就绪");
                    jiuxu.add(zuse.get(i));
                    zuse.remove(i);
                    System.out.println("进程已唤醒");
                    break;
                }

            if(i==jiuxu.size()-1 ){
                System.out.println("阻塞队列中没有该进程!无法唤醒!");
            }
        }
    }
    }
    //x==4
    public static void delete(){
        System.out.println("请输入要终止的进程:");
        String zhong=sc.next();
        if(zuse.size()==0&&jiuxu.size()==0){
            System.out.println("请先添加进程!");
        }
        int p=0;
        for (int i = 0; i < zuse.size(); i++) {
            if (zuse.get(i).getName().equals(zhong) ) {
                zuse.remove(i);
                p++;
                break;
            }
        }
        if(p==0) {
            for (int i = 0; i < jiuxu.size(); i++) {
                if (jiuxu.get(i).getName().equals(zhong)) {
                    jiuxu.remove(i);
                    p++;
                    break;
                }
            }
        }
        if(p==1){System.out.println("进程已终止");}
        else {System.out.println("该进程不存在,无法终止!");}

    }
    //x==5
    public static void xianshi(){
        System.out.println("就绪队列:");
        for(int i = 0; i < jiuxu.size(); i++){
            if(i!=jiuxu.size()-1) {
                jiuxu.get(i).setZhizhen(jiuxu.get(i + 1).getName());
                System.out.println(jiuxu.get(i));
            }
            if(i==jiuxu.size()-1&&jiuxu.size()-1>=0){
                jiuxu.get(i).setZhizhen("NULL");
                System.out.println(jiuxu.get(i));
            }
        }
        System.out.println("阻塞队列:");
        for(int j = 0; j < zuse.size(); j++){
            if(j!=zuse.size()-1){
                zuse.get(j).setZhizhen(zuse.get(j+1).getName());
                System.out.println(zuse.get(j));
            }
            if(j==zuse.size()-1&&zuse.size()-1>=0){
                zuse.get(j).setZhizhen("NULL");
                System.out.println(zuse.get(j));
            }
        }
    }
}

进程调度方法:

public class scheduler {
	static public void scheduler(){
		System.out.println("************************");
        System.out.println("*        进程调度子菜单   *");
        System.out.println("************************");
        System.out.println("*       0…返回主菜单     *");
        System.out.println("*       1…优先级调度     *");
        System.out.println("*       2…时间片调度     *");
        System.out.println("************************");
        System.out.println("请输入您需要的功能:(0-2):");
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        if(x==0){
        	czxt01.main(null);
        }
        if(x==1){
        	PSA();//优先级调度算法
        }
        if(x==2){
        	RR();//时间片调度算法
        }
	}
	
	public static void PSA(){
		int p=0;
		int x=czxt01.jiuxu.get(0).getYouxian();
		if(czxt01.jiuxu.size()==1){
			czxt01.jiuxu.get(0).setZhuangtai("运行");
			System.out.println(czxt01.jiuxu.get(0));
			czxt01.jiuxu.remove(0);
		}
		else {
			for(int i = 0 ;i < czxt01.jiuxu.size(); i++){
				if(x < czxt01.jiuxu.get(i).getYouxian()){
					x = czxt01.jiuxu.get(i).getYouxian();
					p=i;
				}
			}
			czxt01.jiuxu.get(p).setZhuangtai("运行");
			for(int i=0;i arr = new ArrayList();
		if (czxt01.jiuxu.size() == 1) {
			czxt01.jiuxu.get(0).setZhuangtai("运行");
			System.out.println(czxt01.jiuxu.get(0));
			czxt01.jiuxu.remove(0);
		} else {
			for (int i = 0; i < czxt01.jiuxu.size(); i++) {
				int x = czxt01.jiuxu.get(i).getTime();
				czxt01.jiuxu.get(i).setTime(x - sjp);
				if (czxt01.jiuxu.get(i).getTime() <= 0) {
					czxt01.jiuxu.get(i).setTime(0);
					czxt01.jiuxu.get(i).setZhuangtai("运行");
					arr.add(i);
				}
			}
			for (int i = 0; i < czxt01.jiuxu.size(); i++) {
				System.out.println(czxt01.jiuxu.get(i));
			}
			for (int i = 0; i < arr.size(); i++) {
				int e = arr.get(i)-i;
				czxt01.jiuxu.remove(e);
			}
		}
	}
}

讲解视频见b站:java模拟进程调度~(优先级调度,时间片轮转调度)_哔哩哔哩_bilibili

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号