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分?哥沒興致為這么點分熬夜