模拟进程调度——PriorityQueue

PriorityQueue(优先队列)

PriorityQueue(优先队列)
实际上是一个堆(不指定Comparator时默认为最小堆)
队列既可以根据元素的自然顺序来排序,也可以根据 Comparator来设置排序规则。
队列的头是按指定排序方式的最小元素。如果多个元素都是最小值,则头是其中一个元素。
新建对象的时候可以指定一个初始容量,其容量会自动增加。


import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class MyPriotityQueue {
    public static void main(String args[]) {
        Scanner in=new Scanner(System.in);
        myProcess process=new myProcess();
        PriorityQueue<Process> priQue=new PriorityQueue<Process>(5,process);
        System.out.println("请依次输入进程被执行时所需要的时间,0表示结束:");
        boolean flag=true;
        int time;
        for(int process_count=1;flag;process_count++){
            System.out.print("进程" + process_count + "执行所需的时间:");
            time=in.nextInt();
            if(time>0){
                priQue.add(new Process(process_count,time));
            }else {
                flag=false;
            }
        }
        System.out.println("\n进程被调度的顺序是:");
        while (priQue.size()>0){
            Process tj;
            tj = priQue.poll();
            System.out.println("进程" + tj.getProcessID() + "执行所需的时间:"
                    + tj.getTime());
        }
    }

}
class Process{
    private int processID;
    private int time;

    public Process(int processID, int time) {
        this.processID = processID;
        this.time = time;
    }

    public int getProcessID() {
        return processID;
    }

    public void setProcessID(int processID) {
        this.processID = processID;
    }

    public int getTime() {
        return time;
    }

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

class myProcess implements Comparator<Process>{

    @Override
    public int compare(Process p1, Process p2) {
       if(p1.getTime()>p2.getTime())
           return 1;
        if(p1.getTime()<p2.getTime())
            return -1;
        return 0;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于PR(优先级调度)算法的Java代码示例: ```java import java.util.*; public class PriorityScheduler { public static void main(String[] args) { // 创建一个优先队列,用于存储进程 PriorityQueue<Process> queue = new PriorityQueue<>(); // 添加进程到优先队列 queue.add(new Process("P1", 0, 5, 3)); queue.add(new Process("P2", 1, 3, 2)); queue.add(new Process("P3", 2, 6, 1)); queue.add(new Process("P4", 3, 2, 4)); queue.add(new Process("P5", 4, 4, 2)); // 初始化时间片 int timeSlice = 1; // 执行进程调度 while (!queue.isEmpty()) { Process currentProcess = queue.poll(); System.out.println("执行进程:" + currentProcess.getName()); currentProcess.execute(timeSlice); if (currentProcess.isFinished()) { System.out.println("进程 " + currentProcess.getName() + " 执行完毕"); } else { queue.add(currentProcess); } } } } class Process implements Comparable<Process> { private String name; private int arrivalTime; private int burstTime; private int priority; private int remainingTime; public Process(String name, int arrivalTime, int burstTime, int priority) { this.name = name; this.arrivalTime = arrivalTime; this.burstTime = burstTime; this.priority = priority; this.remainingTime = burstTime; } public String getName() { return name; } public boolean isFinished() { return remainingTime == 0; } public void execute(int timeSlice) { remainingTime -= timeSlice; } @Override public int compareTo(Process other) { return Integer.compare(priority, other.priority); } } ``` 在这个示例中,我们使用了一个优先队列来存储进程,并按照优先级对进程进行排序。每次从队列中取出优先级最高的进程进行执行,并根据时间片执行一段时间。如果该进程在时间片结束前完成了执行,就将其从队列中移除。否则,将其重新加入队列,并等待下一次调度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值