哲学家就餐问题 Java语言实现

1. 哲学家就餐问题描述

本文部分内容来源于,欲了解详细内容,自行点击查看。
这里写图片描述

为了不失一般性,我们假设有n个哲学家,围着餐桌思考宇宙、人生问题,每个哲学家面前有一个叉子与之对应,即:共有n个叉子;当哲学家思考一段时间后,他会拿起身边的2个叉子才能进食。进食完毕后,该哲学家放下叉子,继续思考人生、宇宙,如此往复,周而复始。

2. 解决方案

在解决该类问题时,属于竞争资源情形,假设所有哲学家均同时取得其同一方向(如左手边)的叉子时,可能出现了死锁问题。

死锁:死锁是这样一种情形,当每个进程都已经占据某个资源,同时等待另一个资源时,因为条件无法满足而使系统停滞的现象。
活锁:一个线程响应另一个线程的请求,同时另一个线程响应其他线程的请求。线程之间为响应互相的请求而实际未做任何实际工作,从而使得系统陷入饥饿状态。实例:2人A和B在走廊相向而行,A向左边移动让B通过,B向右边移动让A通过,然后反转,周而复始,实际上2人都被对方阻塞。

package com.fqyuan.philosophy;

public class Philosopher implements Runnable {
   
    // The forks on either side of this Philosopher
    private Object leftFork;
    private Object rightFork;

    public Philosopher(Object leftFork, Object rightFork) {
        this.leftFork = leftFork;
     
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值