您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 4浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 哲学家就餐死锁问题代码演示

java持续实践 发布时间:2020-09-12 16:28:35 ,浏览量:4

文章目录
      • 哲学家就餐问题
      • 哲学家就餐问题代码演示

哲学家就餐问题

哲学家就餐问题 如下图所示. 哲学家就餐的餐位上, 左手边和右手边分别只有一只筷子. 如果要就餐, 就必须拿到左手边和右手边的筷子. 流程如下: 先拿起左手的筷子 再拿起右手的筷子 如果筷子被人使用了, 那就等别人用完 吃完后, 把筷子放回原位 哲学家就餐流程的伪代码如下: 就餐问题的死锁风险 : 如果某个时刻, 每个哲学家都拿着左手边的筷子, 那么就会永远等待右手边的筷子,

哲学家就餐问题代码演示

如下为哲学家就餐问题的代码演示. 定义了Philosopher 的哲学家内部类. 实现了Runnable接口, 重写里面的run方法, 执行上面提到的哲学家每天做的事情.

  1. 思考
  2. 拿起左边筷子 (拿到左边筷子的锁)
  3. 拿起右边筷子(拿到右边筷子的锁) --> 吃饭
  4. 放下右边筷子 (释放右边筷子的锁)
  5. 放下左边筷子 (释放左边筷子的锁 )

并且定义了哲学家对象的构造方法, 传入左边筷子与右边筷子 对象.

在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             
关注
打赏
1658054974
查看更多评论
0.0432s