java调度
㈠ java线程调度的策略是什么
时间片轮转 加 优先级
你可以这样试
在一个线程里死循环输出"1",
第二个输出"2"
......
然后设置他们的优先级,并且run.你可以看下屏幕上的输出结果
屏幕跳得很快,但你应该能看清楚优先级最高的那个数字...
㈡ java代码,多机调度问题,怎么解释
多机调度问题的Java实现(贪心算法)
具体问题描述以及C/C++实现参见网址
[java]viewplainprint?
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.LinkedList;
importjava.util.List;
/**
*多机调度问题--贪心算法
*@authorLican
*
*/
publicclassJobMachine{
{
intid;//作业的标号
inttime;//作业时间
publicJobNode(intid,inttime){
this.id=id;
this.time=time;
}
@Override
publicintcompareTo(Objectx){//按时间从大到小排列
inttimes=((JobNode)x).time;
if(time>times)return-1;
if(time==times)return0;
return1;
}
}
{
intid;//机器的标号
intavail;//机器空闲的时间(即机器做完某一项工作的时间)
publicMachineNode(intid,intavail){
this.id=id;
this.avail=avail;
}
@Override
publicintcompareTo(Objecto){//升序排序,LinkedList的first为最小的
intxs=((MachineNode)o).avail;
if(avail<xs)return-1;
if(avail==xs)return0;
return1;
}
}
publicstaticintgreedy(int[]a,intm){
intn=a.length-1;//a的下标从1开始,所以n(作业的数目)=a.length-1
intsum=0;
if(n<=m){
for(inti=0;i<n;i++)
sum+=a[i+1];
System.out.println("为每个作业分别分配一台机器");
returnsum;
}
List<JobNode>d=newArrayList<JobNode>();//d保存所有的作业
for(inti=0;i<n;i++){//将所有的作业存入List中,每一项包含标号和时间
JobNodejb=newJobNode(i+1,a[i+1]);
d.add(jb);
}
Collections.sort(d);//对作业的List进行排序
LinkedList<MachineNode>h=newLinkedList<MachineNode>();//h保存所有的机器
for(inti=1;i<=m;i++){//将所有的机器存入LinkedList中
MachineNodex=newMachineNode(i,0);//初始时,每台机器的空闲时间(完成上一个作业的时间)都为0
h.add(x);
}
inttest=h.size();
for(inti=0;i<n;i++){
Collections.sort(h);
MachineNodex=h.peek();
System.out.println("将机器"+x.id+"从"+x.avail+"到"+(x.avail+d.get(i).time)+"的时间段分配给作业"+d.get(i).id);
x.avail+=d.get(i).time;
sum=x.avail;
}
returnsum;
}
publicstaticvoidmain(String[]args){
int[]a={0,2,14,4,16,6,5,3};
intm=3;
intsum=greedy(a,m);
System.out.println("总时间为:"+sum);
}
}
/**
运行结果:
将机器1从0到16的时间段分配给作业4
将机器2从0到14的时间段分配给作业2
将机器3从0到6的时间段分配给作业5
将机器3从6到11的时间段分配给作业6
将机器3从11到15的时间段分配给作业3
将机器2从14到17的时间段分配给作业7
将机器3从15到17的时间段分配给作业1
总时间为:17
*/
㈢ java调度是什么
貌似在操作系统里面听过这个词,难道是实现调度机制,先执行那个后执行那个??
㈣ java 什么是调度器scheler
几种任务调度的 Java 实现方法与比较,一看便知:
http://www.ibm.com/developerworks/cn/java/j-lo-taskschele/
㈤ 用java处理机调度该怎么做
就是利用线程。。
很麻烦。
㈥ java的多线程是OS调度还是JVM调度的呢
现在java线程和操作系统线程之间的对应关系有三种:
多对一、一对一、多对多
多对一就是所说的“Green thread”,一个java应用程序
被当作一个任务被操作系统调度,而这个java应用程序里
的多个线程则由虚拟机调度执行。也可以说由虚拟机选出
一个多线程java程序里的一个线程作为活动线程,这个线
程再作为操作系统的一个任务被操作系统调度。
一对一就是一个java线程对应一个操作系统线程了,即同
一个多线程java程序里的所有线程都由操作系统统一调度。
多对多还不是很明白。。。
㈦ 怎样用java实现CPU的调度要用到什么类
cpu调度及内存分配算法
写的一个操作系统的实验,篇幅原因,只给了内存分配和回收代码.
/**
单 位:中南大学软件学院0501班
文 件:CpuScheler.java
项 目:操作系统cpu调度算法模拟程序
作 者:刘欣
创建时间:2007年5月14日
**/
public static void InitMem(){
MemTable = new memory();
MemTable.Setmem_beg(0);
MemTable.Setmem_size(100);
MemTable.Setmem_state(0);
}
public boolean InitMemory(Pcb temp){
memory mem_temp,last,now;
last = MemTable;
mem_temp = new memory(temp.GetName(),temp.Getmem_size());
boolean flag = true;
if(mem_temp.Getmem_size() > 100 ){
c.tcpuinfo.setText(mem_temp.GetPcd_name()+"is too big");
flag = false;
}
if(MemTable == null){
return flag;
}
if(mem_temp.Getmem_size() + nowsize > 100){
c.tcpuinfo.setText("memory has been full please wait");
flag = false;
}
if(MemTable.Getmem_state() == 0){// if the first is empty;
if(MemTable.Getmem_size() > mem_temp.Getmem_size()){
mem_temp.next = MemTable;
mem_temp.Setmem_beg( last.Getmem_beg() );
mem_temp.Setmem_state(1);
MemTable.Setmem_beg(mem_temp.Getmem_beg() + mem_temp.Getmem_size());
MemTable.Setmem_size( MemTable.Getmem_size()-mem_temp.Getmem_size() );
MemTable = mem_temp;
nowsize += mem_temp.Getmem_size();
return flag;
}
if (MemTable.Getmem_size() == mem_temp.Getmem_size()){
// MemTable.SetPcd_name(mem_temp.GetPcd_name());
mem_temp = MemTable;
mem_temp.Setmem_state(1);
mem_temp.next = MemTable;
nowsize += mem_temp.Getmem_size();
return flag;
}
}
// begin obtain the other;
if(last != null){
now = last.next;
while(now != null){// search the teble for sutible memory;
if(now.Getmem_state() == 0){// if the first is empty;
if(now.Getmem_size() > mem_temp.Getmem_size()){
mem_temp.next = now;
mem_temp.Setmem_beg( now.Getmem_beg() );
mem_temp.Setmem_state(1);
now.Setmem_beg(mem_temp.Getmem_beg() + mem_temp.Getmem_size());
now.Setmem_size( now.Getmem_size()-mem_temp.Getmem_size() );
last.next = mem_temp;
nowsize += mem_temp.Getmem_size();
return flag;
}
else if (now.Getmem_size() == mem_temp.Getmem_size()){
now.SetPcd_name(mem_temp.GetPcd_name());
mem_temp = now;
mem_temp.Setmem_state(1);
last.next = mem_temp;
nowsize += mem_temp.Getmem_size();
return flag;
}
}
last = now;
//if(last != null){
now = now.next;
//}
}
}
return flag;
}
public void ReleaseMem(Pcb Temp){
memory mem_temp,last,now;
mem_temp = new memory(Temp.GetName(),Temp.Getmem_size());
if(MemTable == null){
c.tcpuinfo.setText("无内存可释放");
//return false;
}
last = MemTable;
now = last.next;
if (MemTable.GetPcd_name() == mem_temp.GetPcd_name()){//如果第一个就是要释放的分区;
MemTable.Setmem_state(0);
MemTable.SetPcd_name(null);
if(now != null && now.Getmem_state() == 0 ){//如果后邻接分区也是空闲的;
MemTable.Setmem_size(MemTable.Getmem_size() + now.Getmem_size());
MemTable.SetPcd_name(null);
nowsize -= mem_temp.Getmem_size();
MemTable.next = null;
// return true;
}
}
while (now != null){//在链表中寻找要释放的分区;
if(now.GetPcd_name() == mem_temp.GetPcd_name()){//找到;
nowsize -= mem_temp.Getmem_size();
now.Setmem_state(0);
if(now.next != null && now.next.Getmem_state() == 0){//查看后面相邻结点是否有空闲;
last.next = now.next;
now.next.Setmem_beg(now.Getmem_beg());
now.next.Setmem_size(now.Getmem_size() + now.next.Getmem_size());
now = last.next;
now.SetPcd_name(null);
}
if(last.Getmem_state() == 0){//查看前面相邻结点是否有空闲;
last.next = now.next;
last.Setmem_size(last.Getmem_size() + now.Getmem_size());
last.SetPcd_name(null);
now = last.next;
// now.SetPcd_name(null);
}
}
last = now;
now = now.next;
}
}
㈧ java线程调度
就绪状态是只要CPU有空闲随时都可以执行,处于就绪状态;
而阻塞状态是需要外界激活,可能是时间、可能是满足某一条件,他才能激活运行,就算CPU有空闲,也需要满足条件才会执行。
㈨ 急求JAVA线程调度算法
这个才20分?哥没兴致为这么点分熬夜