java模拟系统进程算法的小程序
package PID;
public class ProBean {
private String PID;
private int time;
private int priority;
public String getPID() {
return PID;
}
public void setPID(String pid) {
PID = pid;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
}
package PID;
import java.util.ArrayList;
import java.util.List;
public class ProList {
List<ProBean> list=new ArrayList<ProBean>();
public boolean isE(String pid){
for(int i=0;i<list.size();i++){
if(pid.equals(list.get(i).getPID())){
return true;
}
}
return false;
}
}
package PID;
import java.util.List;
import java.util.Scanner;
public class ProTest {
private static Scanner input=new Scanner(System.in);
private static ProList pl=new ProList();
//private static ProBean pb=new ProBean();new only one global object
public static void main(String[]args){
NewPro();
}
public static void NewPro(){
System.out.println("请输入进程数:");
int pnum=input.nextInt();
for(int i=0;i<pnum;i++){
System.out.println("请输入该进程的PID:");
String pid=input.next();
boolean isExist=pl.isE(pid);
if(!isExist){
System.out.println("请输入该进程的运行时间(秒):");
int time=input.nextInt();
System.out.println("请输入该进程的优先数:");
int priority=input.nextInt();
ProBean pb=new ProBean();
pb.setPID(pid);
pb.setTime(time);
pb.setPriority(priority);
List<ProBean> pl1=pl.list;
pl1.add(pb);
}else{
System.out.println("该PID的进程已经存在!");
}
}
System.out.println("------------------------");
System.out.println("请选择算法:");
System.out.println("------------------------");
System.out.println("1.先进先服务算法");
System.out.println("2.优先级算法");
int num1=input.nextInt();
switch(num1){
case 1:
List<ProBean> list=pl.list;
for(int j=0;j<list.size();j++){
ProBean pb=list.get(j);
String pname=pb.getPID();
MyThread t=new MyThread(pname);
t.start();
try {
t.sleep(pb.getTime()*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(pb.getTime()+"秒后结束..."+"\t");
t.stop();
if(!t.isAlive()){
System.out.println("进程结束");
}
}
/* List<ProBean> list=pl.list;
ProBean pb1=list.get(0);
String pt1=pb1.getPID();
MyThread t1 = new MyThread(pt1);
t1.start();
System.out.println();
try {
t1.sleep(pb1.getTime()*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(pb1.getTime()+"秒后结束..."+"\t");
t1.stop();
System.out.println("进程结束");*/
/*
ProBean pb2=list.get(1);
String pt2=pb2.getPID();
MyThread t2 = new MyThread(pt2);
t2.start();
try {
t2.sleep(pb2.getTime()*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
break;
case 2:
int temp=0;
int time=0;
List<ProBean> list2=pl.list;
for(int i=0;i<list2.size()-1;i++){
for(int j=0;j<list2.size()-i-1;j++){
if(list2.get(j).getPriority()<list2.get(j+1).getPriority()){
temp=list2.get(j+1).getPriority();
String ptemp=list2.get(j+1).getPID();
time=list2.get(j+1).getTime();
list2.get(j+1).setPriority(list2.get(j).getPriority());
list2.get(j).setPriority(temp);
list2.get(j+1).setPID(list2.get(j).getPID());
list2.get(j).setPID(ptemp);
list2.get(j+1).setTime(list2.get(j).getTime());
list2.get(j).setTime(time);
}
}
}
for(int i=0;i<list2.size();i++){
//int pri=list2.get(i).getPriority();
ProBean pb=list2.get(i);
String pname=pb.getPID();
MyThread t=new MyThread(pname);
t.start();
try {
t.sleep(pb.getTime()*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(pb.getTime()+"秒后结束..."+"\t");
t.stop();
if(!t.isAlive()){
System.out.println("进程结束");
}
}
break;
}
}
static class MyThread extends Thread{
boolean RUN=true;
MyThread(String s){
super(s);
}
public void run(){
System.out.print("PID:"+getName()+"\t"+"正在运行...");
}
}
}
posted on 2010-06-23 19:24 archie2010 阅读(273) 评论(0) 编辑 收藏 举报