BS1026-基于JavaSwing+多线程+操作系统进程调度算法GUI动画实现进程调用过程程序

采用JavaSwing+多线程+操作系统进程调度算法GUI动画实现进程调用过程程序,系统采用多层C/S软件架构,采用javaSwing窗口开发技术实现进程调度动画界面,实现JAVA2D模拟实现先入先出(FIFO),时间片轮转,优先级调度等操作系统进程调度算法整体逻辑过程。系统主要实现技术包括,java2D动画,java多线程控制,javaswing,操作系统核心调度算法实现等。

原文地址

一、程序设计

本次基于JavaSwing+多线程+操作系统进程调度算法GUI动画实现进程调用过程程序,主要内容涉及:

主要功能模块:进程管理、进程创建、进程调度动画模拟、进程调度算实现,系统多线程控制,分析统计等等
主要包含技术:java,swing,java多线程,操作系统原理,进程调度算法,java2D,GUI
主要包含算法:操作系统进程调度算法,先入先出(FIFO),时间片轮转,优先级调度等

二、效果实现

进程调度

在这里插入图片描述

其他效果省略

三、核心代码

1.时间片轮转算法
本系统程序时间片轮转模块主要实现对操作系统进程调用过程采用时间片轮转算法实现,控制GUI界面动画刷新与数据更新绑定,记录进程调度时间及效果等。

// 采用时间片轮转算法模拟进程调度
	public static void RoundRobin(List<ProcessModel> list) {
		// 循环模拟的轮转下标
		// int round = 0;
		// 最小轮转次数
		int minRoundRobinCount = 0;
		// 实际循环执行次数
		int actualRoundRobinCount = 0;
		for (int i = 0; i < list.size(); i++) {
			minRoundRobinCount += list.get(i).getProcessServiceTime();
		}
		while (true) {
			try {
				actualRoundRobinCount++;
				// 采用随机数模拟轮转
				ProcessModel process = list.get(new Random().nextInt(list
						.size()));
				// 采用round执行循环模拟
				// if (round >= list.size()) {
				// round = 0;
				// }
				// ProcessModel process = list.get(round++);
				int serviceTime = process.getProcessServiceTime();
				int currentTime = process.getProcessCurrentTime();
				if (currentTime < serviceTime) {
					Thread.sleep(1000);
					process.setProcessCurrentStatus("Running");
					process.setProcessCurrentTime(process
							.getProcessCurrentTime() + 1);
					// 刷新要显示的数据
					SystemController.getUserTable().showTableData(list);
					SystemController.getPanelProcess().requestFocus();
					SystemController.getPanelProcess().repaint();
					if (process.getProcessCurrentTime() == process
							.getProcessServiceTime()) {
						process.setProcessCurrentStatus("Finished");
						// 刷新要显示的数据
						SystemController.getUserTable().showTableData(list);
						SystemController.getPanelProcess().requestFocus();
						SystemController.getPanelProcess().repaint();
					} else {
						process.setProcessCurrentStatus("waitting");
					}
				}
				if (actualRoundRobinCount >= minRoundRobinCount && isOver(list)) {
					break;
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	// 判断进程队列中是否还有未完成的进程
	private static boolean isOver(List<ProcessModel> list2) {
		for (int i = 0; i < list2.size(); i++) {
			ProcessModel processModel = list2.get(i);
			if (processModel.getProcessCurrentTime() < processModel
					.getProcessServiceTime()) {
				return false;
			}
		}
		return true;
	}

2.先入先出(FIFO)算法
本系统程序FIFO模块主要实现对操作系统进程调用过程采用FIFO算法实现,控制GUI界面动画刷新与数据更新绑定,记录进程调度时间及效果等。

    /**
	 * 采用先来先服务算法模拟进程调度
	 *
	 * @param list
	 */
	public static void FcFs(List<ProcessModel> list) {
		for (int i = 0; i < list.size(); i++) {
			try {
				// 从进程队列中拿到一个进程(按照创建的顺序)
				ProcessModel processModel = list.get(i);
				for (int j = 0; j < processModel.getProcessServiceTime(); j++) {
					if ("Finished".equals(processModel
							.getProcessCurrentStatus())) {
						continue;
					}
					// 程序暂停一秒
					Thread.sleep(1000);
					processModel.setProcessCurrentStatus("Running");
					processModel.setProcessCurrentTime(processModel
							.getProcessCurrentTime() + 1);
					// 刷新要显示的数据
					SystemController.getUserTable().showTableData(list);
					SystemController.getPanelProcess().requestFocus();
					SystemController.getPanelProcess().repaint();
					if (processModel.getProcessCurrentTime() == processModel
							.getProcessServiceTime()) {
						processModel.setProcessCurrentStatus("Finished");
						// 刷新要显示的数据
						SystemController.getUserTable().showTableData(list);
						SystemController.getPanelProcess().requestFocus();
						SystemController.getPanelProcess().repaint();
					}
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Java进程调度算法的图形化界面(GUI),可以使用Java的图形用户界面(GUI)库,如JavaFX或Swing。 首先,需要创建一个主窗口来显示进程调度算法的图形化界面。可以使用JavaFX的Stage类或Swing的JFrame类作为主窗口,并设置窗口的标题、大小和布局等属性。 然后,在主窗口中添加一些视图组件,如标签、文本框、按钮等,用于用户输入进程信息、设置调度算法参数以及显示调度结果。 在用户输入进程信息时,可以使用文本框或表格等控件,让用户输入进程的名称、到达时间、服务时间等参数。 接下来,需要实现选定的进程调度算法。常见的进程调度算法包括先来先服务(FCFS)、短作业优先(SJF)、优先级调度、轮转调度等。根据用户的选择,可以在按钮的事件处理程序调用相应的算法实现,并将调度结果显示在界面上。 最后,可以添加一些额外的功能或视觉效果来提升用户体验。例如,可以在主窗口中显示一个进度条或动画,表示当前正在运行的进程。此外,可以添加一些图表或统计信息,用于展示进程的等待时间、周转时间等性能指标。 需要注意的是,通过图形化界面实现进程调度算法只是一种可视化的呈现方式,并不会影响算法本身的实现逻辑。因此,在实现图形化界面的同时,还需要编写相应的调度算法代码,并确保两者之间的正确交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值