java流水调度_Java实现流水作业调度问题

该博客探讨了一个流水作业调度问题,涉及两个处理器处理n个作业。算法首先按时间对作业排序,然后依次分配,确保最小化完成所有作业的总时间。程序使用Java实现,通过RenWu类表示作业,ShiJian类表示时间,并利用ArrayList和Collections排序。最终,通过遍历排序后的时间队列,合理分配作业到处理器,以达到最小化完成时间的目标。
摘要由CSDN通过智能技术生成

流水作业调度问题:n个作业要求在两个机器上处理,要求先在第一个上处理,然后再在第二个处理器上处理,求如何安排使得完成后最后时间最短。

下面是程序代码:

import java.util.ArrayList;

import java.util.Collections;

class RenWu

{

private int first;//第一个用的时间

private int second;//第二个用的时间

private boolean flag = false;//标志是否分配了

public RenWu(int first, int second)

{

this.first = first;

this.second = second;

}

public int getFirst()

{

return first;

}

public void setFirst(int first)

{

this.first = first;

}

public int getSecond()

{

return second;

}

public void setSecond(int second)

{

this.second = second;

}

public boolean isFlag()

{

return flag;

}

public void setFlag(boolean flag)

{

this.flag = flag;

}

}

class ShiJian implements Comparable

{

@Override

public String toString()

{

return "ShiJian [time=" + time + ", shuYu=" + shuYu + ", diJiXiang="

+ diJiXiang + "]";

}

public ShiJian(int time, int shuYu, int diJiXiang)

{

super();

this.time = time;

this.shuYu = shuYu;

this.diJiXiang = diJiXiang;

}

private int time;//所用的时间

private int shuYu;//代表属于第几个作业

private int diJiXiang;//代表是第几个流水线上的时间

public int getTime()

{

return time;

}

public void setTime(int time)

{

this.time = time;

}

public int getShuYn()

{

return shuYu;

}

public void setShuYn(int shuYn)

{

this.shuYu = shuYn;

}

public int getDiJiXiang()

{

return diJiXiang;

}

public void setDiJiXiang(int diJiXiang)

{

this.diJiXiang = diJiXiang;

}

@Override

public int compareTo(Object arg0)

{

ShiJian obj = (ShiJian)arg0;

return this.time>obj.getTime()?1:(this.time==obj.getTime()?0:-1);

}

}

public class liushuizuoye

{

public static void main(String[] args)

{

RenWu[] renWu = new RenWu[6];

renWu[0] = new RenWu(3,8);

renWu[1] = new RenWu(12,10);

renWu[2] = new RenWu(5,9);

renWu[3] = new RenWu(2,6);

renWu[4] = new RenWu(9,3);

renWu[5] = new RenWu(11,1);

ArrayList list = new ArrayList();//时间队列

//将时间加入到时间队列

for(int i = 0;i<6;i++)

{

list.add(new ShiJian(renWu[i].getFirst(),i,1));

list.add(new ShiJian(renWu[i].getSecond(),i,2));

}

Collections.sort(list);

//for(int i = 0;i

//System.out.println((ShiJian)list.get(i));

int[] result = new int[6];

int start =0;int end = 5;

for(int i = 0;i

{

ShiJian shijian = (ShiJian)list.get(i);

int num = shijian.getShuYn();//得到属于第几项任务

if(!renWu[num].isFlag())//如果未分配则分配

{

if(shijian.getDiJiXiang() == 1)//表示的是第一项

{

result[start] = num;

start++;

renWu[num].setFlag(true);

}

else//如果是第二个时间

{

result[end] = num;

end--;

renWu[num].setFlag(true);

}

}

}

System.out.println("流水作业的时间是:");

for(int i = 0;i<6;i++)

System.out.print((result[i]+1)+" ");

}

}

算法的基本思想是将作业所有的时间从小到大排序,然后从小到大安排。如果时间属于第一个处理机上的就安排在前面,如果属于第二个机器就安排在后面,前提是这个任务没有安排。

如果哪里错了还请指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值