Java实现哲学家进餐问题

Java基础学习之并发篇:哲学家就餐问题 学习目标 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 阅读详情

哲学家问题是操作系统中的重要问题,我在这里谈谈对哲学家进餐的理解,同时附上源代码。

哲学家进餐是对多线程的使用,这里有五位哲学家,同时只有五双筷子,如果一个哲学家想要吃饭,必须同时拿起身边的两只筷子。

这样如果没有处理好就会出现死锁,于是我在这里要求第一位哲学家最先使用左边筷子,其他哲学家最先使用右边筷子,这是防止死锁的一种方法。

我把拿筷子和放筷子都作为函数封装起来,在线程调用的时候就直接按照“先拿左边筷子,再拿右边筷子,释放左边,在释放右边的筷子”的步骤进行,知道每个人都吃到饭再结束。

package second;


public class Exe {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 0; i < 5; i++) {
new Thread( new Philosopher(i)).start();
}
}


}
class Philosopher implements Runnable {
static int[] chopsticks = { 1, 1, 1, 1, 1};
int tem;
public Philosopher(int i){
this.tem=i;
}
public void run(){
getChopsticks();
}
public void getChopsticks(){
if (tem==0){//如果是第一个哲学家,先用左边的筷子
if(getLeft(tem)){
if(getRight(tem)){
eating();
freeLeft(tem);
freeRight(tem);
}else{
freeLeft(tem);
}
}else{
System.out.println(tem+"无法获得左手边的筷子");
}
}else{
if(getRight(tem)){
if(getLeft(tem)){
eating();
freeRight(tem);
freeLeft(tem);
}else{
freeRight(tem);
}
}else{
System.out.println(tem+"无法获得右手边的筷子");
}
}


}
public void eating(){
System.out.println(tem + "开始吃饭");
}
public boolean getLeft(int tem){
if(chopsticks[tem]==1){
chopsticks[tem]=0;
System.out.println(tem+"获得左手边的筷子");
return true;
}else{
System.out.println(tem+"不能获得左手边的筷子");
return false;
}

}
public boolean getRight(int tem){
int i= (tem+1)%5;
if(chopsticks[i]==1){
chopsticks[i]=0;
System.out.println(tem+"获得右手边的筷子");
return true;
}else{
System.out.println(tem+"不能获得右手边的筷子");
return false;
}
}
public void freeLeft(int tem){
chopsticks[tem] = 1;
System.out.println(tem+"左手边筷子已释放!");


}
public void freeRight(int tem){
int i = (tem + 1) % 5;
chopsticks[i] = 1;
System.out.println(tem+"右手边筷子已释放!");
}
}


课程设计——利用信号量实现哲学家进餐问题(JAVA) 课程设计——利用信号量实现哲学家进餐问题(JAVA) package cn.Douzi.PhiEat; /** * 表示筷子的类 */ public class Chopstick{ /** * 表示筷子是否可用 */ private volatile boolean av... 阅读详情

相关推荐

JAVA实现哲学家就餐问题

用JAVA实现哲学家就餐问题,本源码中采用的是奇数号哲学家先拿左手后拿右手,而偶数号哲学家采用先拿右手后拿左手的策略来预防死锁。

哲学家就餐问题(java全代码)

java实现哲学家就餐问题

weixin_60401853的博客 1297

哲学家就餐问题JAVA解决算法

用Java实现的哲学家就餐问题,多线程,是操作系统的作业,很不错

哲学家就餐问题(死锁)

本文主要讲述死锁的一个经典案例—哲学家就餐问题,并对该问题进行修复。

Qynwang的博客 1127

模拟哲学家进餐问题(JAVA)

桂林理工大学操作系统实习,关于死锁的哲学家进餐问题,演示系统 , java写的,多线程,有图形界面。 桂林理工大学的就来吧,哈哈 ,附带实验报告

哲学家就餐问题JAVA代码

简单易懂 主要应用闲成方面的知识 class Philosopher extends Thread   {   public Philosopher( DiningPhils HOST , int i )   {     host = HOST;     index = i;   }   public void setTimeSlice( int TS )   {     ts = TS;   }   public void setLeftChopstick( boolean flag )   {     host.setChopstick(index, flag);   }……

哲学家就餐问题之java解决

文章目录前言如何解决这个问题呢1.线程粗化2.奇偶互反3.最少保证 前言 哲学家就餐问题是在计算机科学中的一个经典问题,用来演示在并行计算中多线程同步(Synchronization)时产生的问题。 有五个哲学家,他们共用一张圆桌,分别坐在五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考。 代码描述: public class PhilosopherThread extends Thread

大道坦荡的博客 6596

EDEM在农业机械设计中的实战应用:以谷物收割机优化为例

本文以谷物收割机优化为例,详细阐述了EDEM离散元仿真软件在农业机械设计中的实战应用。通过构建精准的“数字谷物”模型与农机部件动态界面,利用GPU加速完成大规模颗粒系统仿真,有效诊断并解决了籽粒夹带损失与清选负荷不均等田间难题,实现了从仿真分析到田间验证的设计优化闭环。

weixin_29256771的博客 108

Java实现哲学家进餐问题(防死锁)

这篇博客与其他妖艳的骚货不同,它简单易懂(其实是高难度的不会),但是直指问题的本质。(另外和我一样是操作实习的同学不要抄我作业哦)问题描述:由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题。该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个...

GAYHANG的博客 2394

SAP SD 顾问面试问题 consultant interview questionnaire

以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教。 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢。   面试问题清单:  一、销售订单类型影响: 可用性检查,交货类型,输出,信贷,定价,需求,报表,合作伙伴,文本,不完整日志,交货开票,订单开票,公司间开票,统计组,屏幕顺序组,参数文件...

weixin_33825683的博客 1809

R爬虫RSelenium环境搭建及简单应用

这是鄙人自己实践的一种可行的环境搭建,我会尽量详细的写下大家步骤。

weixin_44349986的博客 2013

哲学家进餐问题(Java代码实现)

5位哲学家围坐在圆桌旁,每人面前有一碗饭,左右各有一根筷子。

iov_a的博客 1169

TikTok达人私信自动化:用Node.js和纯JavaScript实现WSS协议通信(附完整代码结构)

本文详细介绍了如何使用Node.js和WSS协议实现TikTok达人私信自动化系统。通过分层架构设计、WSS连接管理、消息加密策略及频率控制,开发者可以构建稳定高效的私信工具,突破平台API限制,适用于跨境电商和社交媒体运营场景。

weixin_30352645的博客 519

Java 哲学家进餐问题_Java实现哲学家进餐问题 | 学步园

哲学家问题是操作系统中的重要问题,我在这里谈谈对哲学家进餐的理解,同时附上源代码。哲学家进餐是对多线程的使用,这里有五位哲学家,同时只有五双筷子,如果一个哲学家想要吃饭,必须同时拿起身边的两只筷子。这样如果没有处理好就会出现死锁,于是我在这里要求第一位哲学家最先使用左边筷子,其他哲学家最先使用右边筷子,这是防止死锁的一种方法。我把拿筷子和放筷子都作为函数封装起来,在线程调用的时候就直接按照“先拿左...

weixin_42107374的博客 448

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications

本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。

qq_21843433的博客 615

OpenFOAM-v2006重叠网格挖洞问题实战:如何手动修复overset代码中的边缘识别缺陷

本文深入探讨了OpenFOAM-v2006中重叠网格挖洞问题的实战解决方案,重点修复overset代码中的边缘识别缺陷。通过逆向工程解析挖洞决策机制,设计最小侵入式的函数override方案,并建立多级验证体系,有效解决了网格挖洞区域覆盖不全的问题,提升了计算流体动力学模拟的准确性和可靠性。

weixin_29216049的博客 430

哲学家进餐问题解决思路 JAVA实现

package com.test.server.current; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurr...

qq_41810184的博客 868

TypeScript版LangChain环境配置全攻略:从零搭建AI应用开发环境

大语言模型(LLM)作为当前AI应用开发的核心技术,通过API接口为开发者提供了强大的自然语言处理能力。其工作原理基于Transformer架构,通过预训练和微调实现对人类语言的深度理解与生成。在工程实践中,开发者需要将LLM与外部工具、数据源和业务逻辑有效集成,这正是LangChain框架的技术价值所在——它提供了标准化的组件和接口,简化了复杂AI应用的构建流程。应用场景涵盖智能客服、内容生成、数据分析助手等多个领域。本文聚焦于TypeScript/JavaScript生态下的LangChain开发,详细

weixin_29055699的博客 253

java 多线程实现 哲学家进餐问题

每个哲学家面前都有一碟通心面,由于面条很滑所以要两把叉子才能夹住。相邻两个碟子之间有一把叉子。哲学家两种活动:即吃饭和思考。当一个哲学家觉得饿时他就试图去取他左边和右边的叉子。如果成功地获得两把叉子,他就开始吃饭,吃完以后放下叉子继续思考

tiantangpw的专栏 4107

开发具有情感分析能力的AI Agent

本文将深入探讨开发具有情感分析能力的AI Agent的各个方面。我们将首先介绍情感分析的基础知识,包括定义、背景和应用领域。接着,我们将详细讲解情感分析的核心概念、数据处理方法和算法原理。随后,文章将展示如何设计情感分析系统架构,并进行项目实战,包括环境安装、源代码实现和案例分析。最后,我们将总结最佳实践和注意事项,为读者提供进一步学习的资源。情感分析(Sentiment Analysis),也称为意见挖掘,是自然语言处理(NLP)的一个分支。

SuperAGI2025 1146

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

操作系统中的哲学家进餐问题的实现(java实现)

在学习操作系统这本书的时候,我们使用的是汤小丹老师的《计算机操作系统》接下来我将会使用java语言去实现内部代码。 Swap指令 哲学家就餐问题是在计算机科学中的一个经典问题,用来演示在并行计算中多线程同步(Synchronization)时产生的问题。在1971年,著名的计算机科学家艾兹格·迪科斯彻提出了一个同步问题,即假设有五台计算机都试图访问五份共享的磁带驱动器。稍后,这个问题被托尼·霍...

韦海涛的博客 2006

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

哲学家吃饭问题java版_课程设计——利用信号量实现哲学家进餐问题(JAVA)

packagecn.Douzi.PhiEat;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DiningPhilosophersFrame extendsJFrame{private final JPanel panel1 = newJPanel();private final JPanel ...

weixin_28848917的博客 345

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java实现哲学家进餐问题,及其死锁问题的解决

首先我们来了解一下哲学家进餐问题的背景: 话说有5个哲学家围在一张桌子上吃饭,桌上只有5g根筷子,一个要吃饭必须的得有两根筷子,哲学家要吃饭时总是先拿起左边的筷子,在拿起右边的筷子,这样最佳的情况是可同时有两人可以进餐,最坏的情况是大家都拿起了左边的筷子,大家都没得吃。哲学家吃完时会停下来思考一段时间,等饿了在吃。 下面我们来看一下java如何模拟哲学家进餐问题import java.util.

demoyi的博客 1万+

哲学家进餐问题,java实现

废话不多说,代码开始: publicclassScientistextendsThread{/**@author:Bore*@mail:zhaogangtao@gmail.com*@time:2010/12/7*1.哲学家进餐,5个哲学家,5只筷子*2.哲学家通过getChopstic...

weixin_33872566的博客 134

哲学家进餐问题(java模拟死锁及解决方案)

一、问题描述 哲学家进餐问题是由 Dijkstra 提出并解决的,该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐完毕,放下筷子继续思考。如下图所示: 二、代码模拟实现 经分析可知,放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用。为了实现对筷子的互斥使用,可以用一个信号量表示一只筷子,由这五个信号量构成信

qq_39559641的博客 5720
上一篇: 操作系统之银行家算法的学习Java系列
下一篇: android bitmap学习资料
Richard__su
博客等级 码龄15年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值