文章目录
哲学家就餐问题
- 哲学家就餐问题
- 哲学家就餐问题代码演示
哲学家就餐问题 如下图所示. 哲学家就餐的餐位上, 左手边和右手边分别只有一只筷子. 如果要就餐, 就必须拿到左手边和右手边的筷子. 流程如下: 先拿起左手的筷子 再拿起右手的筷子 如果筷子被人使用了, 那就等别人用完 吃完后, 把筷子放回原位 哲学家就餐流程的伪代码如下:
就餐问题的死锁风险 : 如果某个时刻, 每个哲学家都拿着左手边的筷子, 那么就会永远等待右手边的筷子,
如下为哲学家就餐问题的代码演示. 定义了Philosopher 的哲学家内部类. 实现了Runnable接口, 重写里面的run方法, 执行上面提到的哲学家每天做的事情.
- 思考
- 拿起左边筷子 (拿到左边筷子的锁)
- 拿起右边筷子(拿到右边筷子的锁) --> 吃饭
- 放下右边筷子 (释放右边筷子的锁)
- 放下左边筷子 (释放左边筷子的锁 )
并且定义了哲学家对象的构造方法, 传入左边筷子与右边筷子 对象.
在main 方法中, 初始化了筷子. 初始化了哲学家. 新建线程中传入哲学家对象 ,并且启动线程.
package com.thread.deadlock;
/**
* 类名称:DiningPhilosophers
* 类描述: 演示哲学家就餐问题导致的死锁
*
* @author: https://javaweixin6.blog.csdn.net/
* 创建时间:2020/9/12 15:50
* Version 1.0
*/
public class DiningPhilosophers {
public static void main(String[] args) {
//建立五个哲学家的数组
Philosopher[] philosophers = new Philosopher[5];
//定义筷子的个数, 为哲学家的数量
Object[] chopsticks = new Object[philosophers.length];
//初始化筷子
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?