欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度算法的示例代碼

 更新時(shí)間:2023年07月28日 14:15:28   作者:小L~~~  
時(shí)間片輪轉(zhuǎn)調(diào)度是一種最古老,最簡單,最公平且使用最廣的算法,這篇文章主要為大家介紹了如何利用Java實(shí)現(xiàn)這一算法,需要的可以參考一下

本程序用時(shí)間片輪轉(zhuǎn)調(diào)度算法對五個(gè)進(jìn)程進(jìn)行調(diào)度,假設(shè)每個(gè)進(jìn)程初始狀態(tài)為就緒狀態(tài)。

程序中的某進(jìn)程運(yùn)行時(shí)間以時(shí)間片單位為2進(jìn)行計(jì)算。

實(shí)現(xiàn)代碼

package bean;
public interface process_scheduling_algorithm {
    public void round_cal();
    public pcb get_process_round();
    public int process_finish();
    public void display_round();
    public void set_state();
    public void cpu_round(pcb q);// 采用時(shí)間片輪轉(zhuǎn)調(diào)度算法執(zhí)行某一進(jìn)程
    public pcb get_next(pcb k, pcb head);
}
package bean;
public class pcb implements Cloneable{
    private String name;//進(jìn)程名
    private int cputime;//CPU 運(yùn)行時(shí)間
    private int needtime;//運(yùn)行所需的時(shí)間
    private int count;//執(zhí)行次數(shù)
    private int round;//時(shí)間片輪轉(zhuǎn)輪次
    private state process;//進(jìn)程狀態(tài)
    private pcb next;
    public Object clone() {
        pcb person = null;
        try {
            person = (pcb)super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return person;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setCputime(int cputime) {
        this.cputime = cputime;
    }
    public int getCputime(){
        return cputime;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public int getCount(){
        return count;
    }
    public void setNeedtime(int needtime){
        this.needtime = needtime;
    }
    public int getNeedtime(){
        return needtime;
    }
    public void setRound(int round) {
        this.round = round;
    }
    public int getRound(){
        return round;
    }
    public void setProcess(state process) {
        this.process = process;
    }
    public state getProcess(){
        return process;
    }
    public void setNext(pcb p){
        if(p!=null)next = (pcb) p.clone();
        else next = null;
    }
    public pcb getNext(){
        return next;
    }
}
enum state{
    ready,
    execute,
    block,
    finish
};// 定義進(jìn)程狀態(tài)
package bean;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class round_robin implements process_scheduling_algorithm,Cloneable{
    public static final int P_NUM = 5;
    public static final int P_TIME = 50;
    public static List list = new LinkedList<pcb>();
    //public int position = 1;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public void round_cal() {
        pcb p,r;
        p = get_process_round();
        //System.out.println(p.getName()+"--------");
        //display_round(p);
        int cpu = 0;
        r = (pcb)p.clone();//r = p;
        while (process_finish() == 0){
            cpu += 2;
            cpu_round(r);
            r = (pcb) get_next(r,p).clone();//r = get_next(r,p);
            // System.out.println(r.getName() + "------");
            System.out.println("cpu  " + cpu);
            display_round();
            set_state();
        }
    }
    @Override
    public pcb get_process_round() {
        pcb q = new pcb();
        pcb t = new pcb();
        pcb p = new pcb();
        int i = 0;
        System.out.println("input name and time");
        while(i < P_NUM){
            q.setName(cin.next());
            q.setNeedtime(cin.nextInt());
            q.setCputime(0);
            q.setRound(0);
            q.setCount(0);
            q.setProcess(state.ready);
            q.setNext(null);
            if(i == 0){
                // p = q;
                p = (pcb) q.clone();
                //System.out.println(p.needtime + "---------");
                //t = q;
                t = (pcb) q.clone();
                list.add(t);
            } else {
                //t.next = q; //創(chuàng)建就緒進(jìn)程隊(duì)列
                t.setNext(q);
                //t = q;
                t = (pcb) q.clone();
                list.add(t);
            }
            i++;
        }
//        for(int x=0;x<list.size();x++) {
//        	pcb temp = (pcb) list.get(x);
//        	System.out.println(temp.getName());
//        }
        //System.out.println(p.getName() + "------");
        return p;
    } //輸入模擬測試的進(jìn)程名和執(zhí)行所需時(shí)間
    @Override
    public int process_finish() {
        //System.out.println(q.needtime + "------------");
        int bl = 1,i = 0;
        while(bl!=0 && i < list.size()){
            pcb q = (pcb) list.get(i);
            if(bl != 0 && q.getNeedtime() == 0)bl = 1;
            else bl = 0;
            i++;
            //q = q.next;
            // q = q.getNext();
            // System.out.println(q.getName());
        }
        return bl;
    }
    @Override
    public void display_round() {
        System.out.println("NAME         CPUTIME         NEEDTIME         COUNT         ROUND         STATE");
        for(int i=0;i<list.size();i++){
            pcb p = (pcb) list.get(i);
            System.out.print(p.getName() + "             ");
            System.out.print(p.getCputime() + "               ");
            System.out.print(p.getNeedtime() + "               ");
            System.out.print(p.getCount() + "              ");
            System.out.print(p.getRound() + "           ");
            switch (p.getProcess()){
                case ready:
                    System.out.println("ready");
                    break;
                case execute:
                    System.out.println("execute");
                    break;
                case finish:
                    System.out.println("finish");
                    break;
            }
            //p = p.getNext();
        }
    }
    @Override
    public void set_state() {
        for(int i=0;i<list.size();i++){
            pcb p = (pcb) list.get(i);
            if(p.getNeedtime() == 0) p.setProcess(state.finish);
            if(p.getProcess() == state.execute) p.setProcess(state.ready);
            //p = p.getNext();
        }
    }
    @Override
    public void cpu_round(pcb q) {
        q.setCputime(q.getCputime() + 2);//q.cputime += 2;
        q.setNeedtime(q.getNeedtime() - 2);//q.needtime -= 2;
        if (q.getNeedtime() < 0) q.setNeedtime(0);
        q.setCount(q.getCount() + 1);//q.count++;
        q.setRound(q.getRound() + 1);//q.round++;
        q.setProcess(state.execute);//q.process = state.execute;
        for(int i=0;i<list.size();i++) {
            pcb temp = (pcb) list.get(i);
            if(q.getName() == temp.getName()) {
                list.remove(i);
                list.add(i, q);
            }
        }
    }//采用時(shí)間片輪轉(zhuǎn)調(diào)度算法執(zhí)行某一進(jìn)程
    @Override
    public pcb get_next(pcb k, pcb head) {
        //System.out.println(k.getName() + " " + head.getName() + "------");
        pcb t;
        t = (pcb) k.clone();//t = k;
        int opsition = 0;
        for(int i=0;i<list.size();i++) {//從列表中查找k的位置
            pcb temp = (pcb) list.get(i);
            if(t.getName() == temp.getName()) {
                opsition = i;
                break;
            }
        }
        do {
            //t = t.getNext();//t = t.next;
            if(opsition+1 < list.size()) {
                t = (pcb) list.get(++opsition);
                //System.out.println(t.getName() +"-----------");
                //break;
            }
            else{
                opsition++;
                break;
            }
        }while(t != null && t.getProcess()== state.finish && opsition < list.size());
        if(opsition == list.size()) {
            t = (pcb) head.clone();//t = head;
            //System.out.println(t.getName() + " -------------");
            //while (t.getNext() != k && t.getProcess() == state.finish) t = t.getNext();
            for(int i = 0; i < list.size(); i++){
                pcb temp = (pcb) list.get(i);
                if(temp.getName() == t.getName()){
                    opsition = i;
                    break;
                }
            }
            do {
                if(opsition+1 < list.size()) t = (pcb) list.get(++opsition);
                //opsition++;
            }while(t != null && t.getNext() != k && t.getProcess() == state.finish && opsition < list.size());
        }
        return t;
    }
    public static void main(String[] args) {
        round_robin test = new round_robin();
        test.round_cal();
    }
    public Scanner cin = new Scanner(System.in);
}
/*測試樣例一
a1 2
a2 3
a3 4
a4 5
a5 6
測試樣例二
a1 2
a2 3
a3 4
a4 2
a5 4
 */

到此這篇關(guān)于Java實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度算法的示例代碼的文章就介紹到這了,更多相關(guān)Java時(shí)間片輪轉(zhuǎn)調(diào)度算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解log4j.properties的簡單配置和使用

    詳解log4j.properties的簡單配置和使用

    本篇文章主要介紹了詳解log4j.properties的簡單配置和使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java利用正則表達(dá)式提取數(shù)據(jù)的方法

    Java利用正則表達(dá)式提取數(shù)據(jù)的方法

    最近由于項(xiàng)目需求需要提取txt里的數(shù)據(jù),之前用C#實(shí)現(xiàn)過,由于最近學(xué)習(xí)了java,所以嘗試用java實(shí)現(xiàn)下,這篇文章主要介紹了Java利用正則表達(dá)式提取數(shù)據(jù)的方法,需要的朋友可以參考下,下面來一起看看吧。
    2016-12-12
  • Springboot配置全局跨域未生效,訪問接口報(bào)錯(cuò)問題及解決

    Springboot配置全局跨域未生效,訪問接口報(bào)錯(cuò)問題及解決

    這篇文章主要介紹了Springboot配置全局跨域未生效,訪問接口報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot集成itext導(dǎo)出PDF的過程

    SpringBoot集成itext導(dǎo)出PDF的過程

    本文介紹了如何在Spring Boot中集成iText庫導(dǎo)出PDF文件,并解決中文亂碼問題,步驟包括添加依賴、準(zhǔn)備字體、打開系統(tǒng)字體目錄選擇字體、在控制器中新增方法、創(chuàng)建并測試UserPdfExportService類,以及添加請求頭,感興趣的朋友一起看看吧
    2024-11-11
  • MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復(fù)的操作方法

    MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復(fù)的操作方法

    這篇文章主要介紹了MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復(fù)的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 地址到經(jīng)緯度坐標(biāo)轉(zhuǎn)化的JAVA代碼

    地址到經(jīng)緯度坐標(biāo)轉(zhuǎn)化的JAVA代碼

    這篇文章介紹了地址到經(jīng)緯度坐標(biāo)轉(zhuǎn)化的JAVA代碼,有需要的朋友可以參考一下
    2013-09-09
  • JAVA線程sleep()和wait()詳解及實(shí)例

    JAVA線程sleep()和wait()詳解及實(shí)例

    這篇文章主要介紹了JAVA線程sleep()和wait()詳解及實(shí)例的相關(guān)資料,探討一下sleep()和wait()方法的區(qū)別和實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2017-05-05
  • Springboot hibernate envers使用過程詳解

    Springboot hibernate envers使用過程詳解

    這篇文章主要介紹了Springboot hibernate envers使用過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java實(shí)現(xiàn)網(wǎng)頁解析示例

    java實(shí)現(xiàn)網(wǎng)頁解析示例

    這篇文章主要介紹了java實(shí)現(xiàn)網(wǎng)頁解析示例,需要的朋友可以參考下
    2014-04-04
  • mybatis查詢語句揭秘之參數(shù)解析

    mybatis查詢語句揭秘之參數(shù)解析

    這篇文章主要給大家介紹了關(guān)于mybatis查詢語句之參數(shù)解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論