我很好奇如何在Java中实现FIFO(先进先出)算法。我已经创建了3个类,但必须实现FIFO和SJF(最短作业优先)的调度算法。
对于模拟器类,我们有以下变量:
private CPU cpu1;
private ArrayList<Process> ready;
private ArrayList<Process> finished;
private int time;
然后方法是:
public Process select(ArrayList<Process> ready){
if(SCHEDULING_ALGORITHM.equals("FIFO"))
{
//add code here
}
else if(SCHEDULING_ALGORITHM.equals("SJF"))
//add code here
}
其他方法是:
public void addProcess(String name, int start, int length)
{
Process temp = new Process(name, start, length);
ready.add(temp);
}
还有另外两个类Process和CPU。流程保存有关应存储在那里的单个流程的任何信息。
答案 0 :(得分:0)
FIFO是队列的确切结构。您可以使用Java的ArrayDeque实现为FIFO实现创建队列。使用ArrayDeque上的poll()方法从队列中获取下一个对象。
ArrayDeque<Object-Type-Here> queue = new ArrayDeque<>();
//add your objects to the queue here in a first-in-first-out manner
------------------------------
//Here's how to get the first thing out of the queue
queue.poll();
对于SJF,您可以使用最小堆。为此,请使用Java的PriorityQueue实现。您可能需要实现Comparable或创建compareTo函数,具体取决于您希望如何实现解决方案。 compareTo函数将允许priorityQueue像min-heap一样自动排序。也可以使用poll()方法。
PriorityQueue<Object-Type-Here> pq = new PriorityQueue<>();
//add your objects to the min-heap here for a shortest-job-first implementation