package philosopher;
/* 餐具类 */
public class Fork {
private boolean[] status = {false,false,false,false,false}; //将餐具使用状态置为false,表示为未使用状态
public synchronized void takeFork(){ //同步锁方法,同一时间只能被一个线程访问
String name = Thread.currentThread().getName(); //获取当前线程id
int i = Integer.parseInt(name.split("-")[1]);
while(status[i] || status[(i + 1) % 5]){
try{
System.out.println("哲学家" + (i+1) + ": 我正在等待..");
wait(); //让当前线程进入等待状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
}catch (InterruptedException e){
e.printStackTrace();
}
}
status[i] = true; //将左右餐具状态置为true,表示被占用
status[(i + 1) % 5] = true;
}
public synchronized void putFork(){ //同步锁方法,同一时间只能被一个线程访问
String name = Thread.currentThread().getName();
int i = Integer.parseInt(name.split("-")[1]);
status[i] = false; //将餐具状态置为true
status[(i + 1) % 5] = false; //将左右餐具状态置为false
notifyAll(); // 唤醒在该对象上等待的所有线程
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目介绍】 基于java的哲学家就餐问题源码+项目说明.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 哲学家就餐问题 * 设计要求:哲学家有N个,规定全体到齐后开始讨论,在讨论的间隙哲学家进餐,每人进餐时都需使用刀、叉合一把,所有哲学家刀和叉都拿到后才能进餐。哲学家的人数、餐桌上的布置自行设定,实现刀和叉的互斥使用算法的程序实现。 * 哲学家有N个,规定全体到齐后开始讨论,在讨论的间隙哲学家进餐,每人进餐时都需使用刀、叉合一把,所有哲学家刀和叉都拿到后才能进餐。哲学家的人数、餐桌上的布置自行设定,实现刀和叉的互斥使用算法的程序实现。要求: 1. 设置进程,描述哲学家; 2. 随机启动哲学家; 3. 显示进程执行状态; 4. 编写正确的哲学家程序,保证不出现死锁。
资源推荐
资源详情
资源评论
收起资源包目录
基于java的哲学家就餐问题源码+项目说明.zip (12个子文件)
项目说明.md 805B
src
philosopher
Fork.java 1KB
Main.java 235B
Philosopher.java 985B
out
production
Dining_problems_of_philosophers
philosopher
Fork.class 2KB
Main.class 627B
Philosopher.class 2KB
.idea
uiDesigner.xml 9KB
misc.xml 271B
modules.xml 302B
.gitignore 182B
Dining_problems_of_philosophers.iml 423B
共 12 条
- 1
资源评论
Make程序设计
- 粉丝: 5725
- 资源: 3570
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功