哲学家就餐问题

博客详细探讨了哲学家就餐问题,这是一个经典的并发控制问题。五个哲学家需要同时使用两根筷子吃饭,但只有五根筷子。文章通过创建Chopstick类来模拟筷子,并使用数组管理这些筷子的状态,以阐述问题解决方案。
摘要由CSDN通过智能技术生成

哲学家就餐问题

问题:一共五个筷子,五个哲学家,同时拿起两个筷子才能进行就餐.哲学家要么进行思考
要么进行就餐.

所以就用一个类来表示筷子Chopstick{里面有两个属性,一个记录筷子ID,一个记录筷子状态}. 用一个Chopstick数组来记录五个哲学家.

/**
 * Description:哲学家就餐问题
 *
 * @Author Fann
 */
public class Dinner implements Runnable {
    private volatile Chopstick[] chopsticks;  //记录五个筷子

    class Chopstick {
        Integer id; //记录筷子的id
        boolean isTake; //记录筷子的状态
        public Chopstick(){
            this.id = 0;
            this.isTake = false;
        }
    }
    public Dinner(){
        this.chopsticks = new Chopstick[5];
        for (int i = 0; i < 5; i++) {  //五个筷子放到数组的五个位置,然后isTake状态都置为false.
            chopsticks[i] = new Chopstick();
            chopsticks[i].id = i;
            chopsticks[i].isTake = false;
        }
    }

    @Override
    public void run() {
        while (true){
            synchronized (this){
                try{
                    //先得到当前哲学家的id
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值