教育路上

全国站>Java>多线程>java哲学家进餐模拟
学员需求

java哲学家进餐模拟

摘要:java哲学家进餐模拟,哲学家进餐问题描述有五个哲学家,java 哲学家 进餐 模拟。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。

2022-05-19 13:28网络推荐

发布时间:
2022-05-19 13:28
信息来源:
网络推荐
浏览次数:
610
java哲学家进餐模拟

任务介绍:n 哲学家进餐问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,

n 哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,n

平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时

才能进餐,n 进餐完毕,放下筷子又继续思考。

任务目标:掌握多线程编程,掌握信号量机制

实现思路:哲学家问题的约束条件为:1、只有拿到两只筷子时,哲学家才能吃饭。 2、如

果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。3、任一哲学家在自己未拿到

两只筷子吃饭前,不会放下手中拿到的筷子。筷子是临界资源,一段时间只允许一位哲学家

使用。为了表示互斥,用一个信号量表示一只筷子,五个信号量构成信号量数组。

from shengerguan

实现代码

Chopstick.java

public class Chopstick {

int num;

public Chopstick(int num)

{

this.num=num;

}

public String printName()

{

return "第"+num+"只筷子";

}

}

Philosopher.java

public class Philosopher implements Runnable {

int num;

Chopstick leftChopstick;

Chopstick rightChopstick;

public Philosopher(int num,Chopstick left,Chopstick right)

{

this.num=num;

leftChopstick=left;

rightChopstick=right;

}

public void run() {

while(true)

{

synchronized(leftChopstick)

{

System.out.println(num+"号哲学家获得了左手边的筷子,即

"+leftChopstick.printName());

synchronized (rightChopstick) {

System.out.println(num+"号哲学家获得了右手边的筷子,即

"+rightChopstick.printName());

System.out.println(num+"号哲学家开始进餐。");

try {

Thread.sleep(2000);

}

catch (InterruptedException e) {

// TODO: handle exception

e.printStackTrace();

}

System.out.println(num+"号哲学家进餐完毕,放下右手边筷子

"+rightChopstick.printName());

}

System.out.println(num+"号哲学家进餐完毕,放下左手边筷子

"+leftChopstick.printName());

}

System.out.println(num+"号哲学家进餐完毕,开始思考问题。");

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

Example03.java

public class Example03 {

public static void main(String[] args) {

// TODO Auto-generated method stub

Chopstick ct1,ct2,ct3,ct4,ct5;

ct1=new Chopstick(1);

ct2=new Chopstick(2);

ct3=new Chopstick(3);

ct4=new Chopstick(4);

ct5=new Chopstick(5);

Philosopher ps1=new Philosopher(1, ct1, ct2);

Philosopher ps2=new Philosopher(2, ct2, ct3);

Philosopher ps3=new Philosopher(3, ct3, ct4);

Philosopher ps4=new Philosopher(4, ct4, ct5);

Philosopher ps5=new Philosopher(5, ct1, ct5);

new Thread(ps1).start();

new Thread(ps2).start();

new Thread(ps3).start();

new Thread(ps4).start();

new Thread(ps5).start();

}

}


上一篇:
java编写一个程序在窗体中模拟赛车比赛
下一篇:
java线程概述
标签:
网友评论
发布评论

访客的评论 2024/04/27 12:15

文中描述的是准确的吗,如何报名!

相关推荐
我也来发表评价关闭
我对该内容的评价:
0
评价500
验证码: 看不清 换一张
提交 (匿名发布,无须担心别人知道您的身份)
学校免费发布信息关闭
我们审核后会尽快展示,如有图片请发邮件到:edu63@foxmail.com

姓      名:

内      容:

手机号码:

验  证  码:  换一张

确认提交
填写需求信息关闭
我们会根据您的需求匹配并审核留言

姓      名:

意向城市:

留      言:

手机号码:

验  证  码:  换一张

确认提交
完善补充本文信息关闭
非常感谢您帮助完善补充本文信息


 换一张

确认提交