基于Java窗体实现的模拟哲学家进餐演示系统

该博客介绍了模拟操作系统中哲学家进餐问题的程序设计,通过图形化界面展示并发执行和同步互斥问题。程序包含6个类和10个模块,实现了多种避免死锁的方法,并提供了用户友好的操作界面。在调试过程中解决了可能出现的死锁问题,优化了算法。用户可以选择不同的进餐策略进行演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源下载地址:https://download.csdn.net/download/sheziqiong/85661378
资源下载地址:https://download.csdn.net/download/sheziqiong/85661378

一、需求分析

模拟操作系统进程之间并发执行的原理,及其所引起的同步、互斥问题的方法。

本程序的运行方便简洁,运行结果以图形化的方式展示出来,每个方法的演示是互相独立的,可以多个哲学家进餐方法同时进行演示。用户可以用鼠标直接选择想要展示的方法,对于用户来讲,可以直接观察运行结果,十分方便易用。

输出的形式是将每种状态用一个图来表示和在一个文本框中用文字输出此时每个哲学家所处的状态,共有 4 种状态,即初始化、思考、等待和吃饭状态,每个哲学家思考、吃饭是按顺序的,即思考完后,去吃饭,如果拿不到筷子,就一直等待筷子,直到拿到为止。

二、概要设计

1.采用图形的变化和文本的输出来表示哲学家在每个时刻的状态。

2.本程序共 6 个类, 10 个模块,如下:

各个类的功能:

  • Main 类:初始化主界面类,它结合 javaFx 提供的可图化界面设计来设计主界面
  • MainController 类:处理主界面鼠标选择事件的类,用来创建多个子窗口。
  • Service 类:用来存放一些静态共享数据
  • StartControl 类:控制运行界面的各种函数和数据
  • Chopsticks 类:设置筷子的各种参数和使用方法,例如是否被使用,设置筷子的状态
  • Philosopher 类:设置哲学家的思考、等待和吃饭方法。

各个模块的功能:

  • 界面设置模块 MainView.fxml,StartView.fxml
  • 主程序模块 Main()
  • 子窗体弹出模块 onclick1(),onclick2(),onclick3(),onclick4()
  • 静态共享资源设置模块 Service()
  • 初始化模块 initialize(URL location, ResourceBundle resources)
  • 筷子资源设置模块 takeUp(),putDown()
  • 哲学家思考方法实现模块 think()
  • 哲学家等待方法实现模块 waiting()
  • 哲学家吃饭方法实现模块 eat1(),eat2(),eat3(),eat4()

3.主程序的流程图

4.各程序模块之间的层次关系

三、详细设计

1.程序中定义的数据类型

Service 类中:

public static int method=0;

分配筷子的方法(0 不做任何处理,1 一次分配所有筷子,2 最多允许 4 个同时拿左边筷子 3 奇数拿左边,偶数拿右边)

private int leftNum=0;

记录拿左边筷子的个数

Philosopher 类中:

private int state

哲学家的状态:

  • 0 思考
  • 1 左边右边筷子都没拿去吃饭
  • 2 已经拿到左边筷子去吃饭
  • 3 已经拿到右边筷子去吃饭
  • 4 什么没拿等待筷子
  • 5 拿到左边筷子等待
  • 6 拿到右边筷子等待

吃饭动作包括:拿左边筷子、拿右边筷子、放下筷子,所以去吃饭不一定能成功,可能要等待左右边筷子、拿到左边筷子等待去吃饭和拿到右边筷子等待去吃饭。

四、调式分析

(1)调式过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析

实现最多 4 个人同时拿左边筷子出现死锁问题:当时,调试查看了左边筷子的确最多同时只有被 4 个人拿起,但没有人拿右边筷子去吃饭,后来才想到如果拿到了左边筷子等待,等待完又要去拿左边筷子,肯定死锁了。因此,我设置了哲学家 7 个状态,即思考、手上没有筷子去吃饭、已经拿了左边筷子去吃饭、已经拿了右边筷子去吃饭、什么没拿等待、拿了左边筷子等待和拿了右边筷子等待。

(2)算法的改进思想

本程序要实现各种避免死锁方法同时进行演示,且互不影响,不能用简单共享静态资源来实现,而要在每个子弹窗初始化时设置每次算法演示的资源数据,通过创建对象来绑定相应的数据。将筷子资源和哲学家资源进行分模块来实现,然后在主程序中调用该资源,使得算法实现思路清晰,代码管理便捷。

五、用户使用说明

  • 本程序的功能是实现一个模拟哲学家进餐问题的系统。
  • 程序开始要求用户选用哪一种算法进行哲学家进餐演示。用户需点击对应的方法,然后弹出一个子窗口来进行相应的算法演示。用户需点击开始按钮开始演示和点击结束按钮结束演示。

六、测试与运行结果

(1)主菜单

(2)哲学家不做任何处理进餐方法

点击开始

(3)一次分配所有筷子进餐方法

点击开始

(4)最多允许 4 个人同时拿左边筷子方法

点击

(5)奇数号哲学家先拿左边筷子,偶数号哲学家先拿右边筷子方法

点击

资源下载地址:https://download.csdn.net/download/sheziqiong/85661378
资源下载地址:https://download.csdn.net/download/sheziqiong/85661378

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值