进程实体类:
public class Jincheng {
private String name;
private int youxian;
private int time;
private String zhuangtai;
private String zhizhen;
private ArrayList ziyuan;
@Override
public String toString() {
return "进程{" +
"进程名='" + name + ''' +
", 优先级=" + youxian +
", 运行时间=" + time +
", 进程状态='" + zhuangtai + ''' +
", 指针='" + zhizhen + ''' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYouxian() {
return youxian;
}
public void setYouxian(int youxian) {
this.youxian = youxian;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public String getZhuangtai() {
return zhuangtai;
}
public void setZhuangtai(String zhuangtai) {
this.zhuangtai = zhuangtai;
}
public String getZhizhen() {return zhizhen;}
public void setZhizhen(String zhizhen) {this.zhizhen = zhizhen;}
public ArrayList getZiyuan() {
return ziyuan;
}
public void setZiyuan(ArrayList ziyuan) {
this.ziyuan = ziyuan;
}
}
进程操作方法,主函数:进程创建、阻塞、唤醒、终止、显示、调度
public class czxt01 {
static ArrayList jiuxu=new ArrayList();
static ArrayList zuse=new ArrayList();
static Scanner sc=new Scanner(System.in);
public static void main(String[] args) {
while (true) {
System.out.println("********************");
System.out.println("* 系统主菜单 *");
System.out.println("********************");
System.out.println("* 1…创建 *");
System.out.println("* 2…阻塞 *");
System.out.println("* 3…唤醒 *");
System.out.println("* 4…终止 *");
System.out.println("* 5…显示 *");
System.out.println("* 6…调度 *");
System.out.println("* 0…退出 *");
System.out.println("********************");
System.out.println("请输入您需要的功能:(0-6):");
int x = sc.nextInt();
if (x == 0) {
break;
}
if (x == 1) {
add();
}
if (x == 2) {
zusee();
}
if (x == 3) {
huanxing();
}
if (x == 4) {
delete();
}
if (x == 5) {
xianshi();
}
if(x==6){
if(jiuxu.size()==0){
System.out.println("就绪队列为空,无法执行!");
}
else{
scheduler.scheduler();
}
}
if(x<0||x>6){
System.out.println("输入失败!请输入1-6之间的数字!");
}
}
}
//x==1
public static void add(){
Jincheng jc = new Jincheng();
System.out.println("进程名:");
jc.setName(sc.next());
System.out.println("优先级");
jc.setYouxian(sc.nextInt());
System.out.println("运行时间");
jc.setTime(sc.nextInt());
int p=0;
if (jiuxu.size()!=0){
for (int i = 0; i < jiuxu.size(); i++) {
if (jiuxu.get(i).getName().equals(jc.getName())) {
System.out.println("就绪队列中存在同名文件,无法添加!");
p++;
break;
}
}
}
if(p==0) {
if (zuse.size() != 0) {
for (int i = 0; i < zuse.size(); i++) {
if (zuse.get(i).getName().equals(jc.getName())) {
System.out.println("阻塞队列中存在同名文件,无法添加!");
p++;
break;
}
}
}
}
if(p==0){
jiuxu.add(jc);
System.out.println("添加进程成功!");
jiuxu.get(jiuxu.size()-1).setZhuangtai("就绪");
}
for(int i = 0; i < jiuxu.size(); i++){
if(i!=jiuxu.size()-1) {
jiuxu.get(i).setZhizhen(jiuxu.get(i + 1).getName());
// System.out.println(jiuxu.get(i));
}
if(i==jiuxu.size()-1&&jiuxu.size()-1>=0){
jiuxu.get(i).setZhizhen("NULL");
// System.out.println(jiuxu.get(i));
}
}
// System.out.println("阻塞队列:");
for(int j = 0; j < zuse.size(); j++){
if(j!=zuse.size()-1){
zuse.get(j).setZhizhen(zuse.get(j+1).getName());
// System.out.println(zuse.get(j));
}
if(j==zuse.size()-1&&zuse.size()-1>=0){
zuse.get(j).setZhizhen("NULL");
// System.out.println(zuse.get(j));
}
}
}
//x==2
public static void zusee(){
int p=0;
System.out.println("请输入要阻塞的进程名:");
String cha=sc.next();
if(jiuxu.size()<=0){
System.out.println("请先添加进程!");
}
else {
for (int j = 0; j < zuse.size(); j++) {
if (zuse.get(j).getName().equals(cha)) {
System.out.println("该进程已处在阻塞状态");
p++;
break;
}
}
if(p==0) {
for (int i = 0; i < jiuxu.size(); i++) {
if (jiuxu.get(i).getName().equals(cha)) {
zuse.add(jiuxu.get(i));
jiuxu.get(i).setZhuangtai("阻塞");
jiuxu.remove(i);
System.out.println("进程已阻塞");
p++;
break;
}
}
}
if (p==0) {
System.out.println("队列中没有该进程!无法阻塞!");
}
}
}
//x==3 唤醒进程
public static void huanxing(){
System.out.println("请输入要唤醒的进程:");
String huan=sc.next();
// System.out.println("");
if(zuse.size()==0){
System.out.println("阻塞队列为空!无法唤醒!");
}
else {
for (int i = 0; i < zuse.size(); i++) {
if (zuse.get(i).getName().equals(huan)) {
zuse.get(i).setZhuangtai("就绪");
jiuxu.add(zuse.get(i));
zuse.remove(i);
System.out.println("进程已唤醒");
break;
}
if(i==jiuxu.size()-1 ){
System.out.println("阻塞队列中没有该进程!无法唤醒!");
}
}
}
}
//x==4
public static void delete(){
System.out.println("请输入要终止的进程:");
String zhong=sc.next();
if(zuse.size()==0&&jiuxu.size()==0){
System.out.println("请先添加进程!");
}
int p=0;
for (int i = 0; i < zuse.size(); i++) {
if (zuse.get(i).getName().equals(zhong) ) {
zuse.remove(i);
p++;
break;
}
}
if(p==0) {
for (int i = 0; i < jiuxu.size(); i++) {
if (jiuxu.get(i).getName().equals(zhong)) {
jiuxu.remove(i);
p++;
break;
}
}
}
if(p==1){System.out.println("进程已终止");}
else {System.out.println("该进程不存在,无法终止!");}
}
//x==5
public static void xianshi(){
System.out.println("就绪队列:");
for(int i = 0; i < jiuxu.size(); i++){
if(i!=jiuxu.size()-1) {
jiuxu.get(i).setZhizhen(jiuxu.get(i + 1).getName());
System.out.println(jiuxu.get(i));
}
if(i==jiuxu.size()-1&&jiuxu.size()-1>=0){
jiuxu.get(i).setZhizhen("NULL");
System.out.println(jiuxu.get(i));
}
}
System.out.println("阻塞队列:");
for(int j = 0; j < zuse.size(); j++){
if(j!=zuse.size()-1){
zuse.get(j).setZhizhen(zuse.get(j+1).getName());
System.out.println(zuse.get(j));
}
if(j==zuse.size()-1&&zuse.size()-1>=0){
zuse.get(j).setZhizhen("NULL");
System.out.println(zuse.get(j));
}
}
}
}
进程调度方法:
public class scheduler {
static public void scheduler(){
System.out.println("************************");
System.out.println("* 进程调度子菜单 *");
System.out.println("************************");
System.out.println("* 0…返回主菜单 *");
System.out.println("* 1…优先级调度 *");
System.out.println("* 2…时间片调度 *");
System.out.println("************************");
System.out.println("请输入您需要的功能:(0-2):");
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
if(x==0){
czxt01.main(null);
}
if(x==1){
PSA();//优先级调度算法
}
if(x==2){
RR();//时间片调度算法
}
}
public static void PSA(){
int p=0;
int x=czxt01.jiuxu.get(0).getYouxian();
if(czxt01.jiuxu.size()==1){
czxt01.jiuxu.get(0).setZhuangtai("运行");
System.out.println(czxt01.jiuxu.get(0));
czxt01.jiuxu.remove(0);
}
else {
for(int i = 0 ;i < czxt01.jiuxu.size(); i++){
if(x < czxt01.jiuxu.get(i).getYouxian()){
x = czxt01.jiuxu.get(i).getYouxian();
p=i;
}
}
czxt01.jiuxu.get(p).setZhuangtai("运行");
for(int i=0;i arr = new ArrayList();
if (czxt01.jiuxu.size() == 1) {
czxt01.jiuxu.get(0).setZhuangtai("运行");
System.out.println(czxt01.jiuxu.get(0));
czxt01.jiuxu.remove(0);
} else {
for (int i = 0; i < czxt01.jiuxu.size(); i++) {
int x = czxt01.jiuxu.get(i).getTime();
czxt01.jiuxu.get(i).setTime(x - sjp);
if (czxt01.jiuxu.get(i).getTime() <= 0) {
czxt01.jiuxu.get(i).setTime(0);
czxt01.jiuxu.get(i).setZhuangtai("运行");
arr.add(i);
}
}
for (int i = 0; i < czxt01.jiuxu.size(); i++) {
System.out.println(czxt01.jiuxu.get(i));
}
for (int i = 0; i < arr.size(); i++) {
int e = arr.get(i)-i;
czxt01.jiuxu.remove(e);
}
}
}
}
讲解视频见b站:java模拟进程调度~(优先级调度,时间片轮转调度)_哔哩哔哩_bilibili



