java中哲学家就餐问题

日期:2020/1/15

功能:实现哲学家就餐问题

IDE:Intellij IDEA

package testDemo;

import java.io.*;
import java.util.*;

//筷子类
class Chopstick{
    //标记位
    boolean available;
    //构造函数
    Chopstick(){
        this.available = true;
    }
    //拿起筷子
    public synchronized void takeUp(){
        //有人在用
        while (!available){
            try {
                System.out.println("用餐等待中...");
                //进入等待队列
                wait();
            }catch (InterruptedException e){

            }
        }
        //阻止别人再用
        available = false;
    }
    //放下筷子
    public synchronized void putDown(){
        //别人可用
        available = true;
        //唤醒别人
        notify();
    }
}


//哲学家类
class Philosophy extends Thread{
    Chopstick left;
    Chopstick right;
    int ID;
    //构造函数
    public Philosophy(Chopstick left,Chopstick right,int ID){
        this.left = left;
        this.right = right;
        this.ID = ID;
    }
    //就餐
    public void eat(){
        left.takeUp();
        right.takeUp();
        System.out.println(ID+"号哲学家正在用餐");
    }
    //思考
    public void think(){
        left.putDown();
        right.putDown();
        System.out.println(ID+"号哲学家正在思考");
    }
    //进程运行
    public void run(){
        //循环判断
        while (true){
            eat();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            think();
            try {
                Thread.sleep(1000);
            }catch (InterruptedException ee){

            }
        }
    }
}


//测试类
public class Test {
    //执行入口
    public static void main(String[] args) throws IOException {
        int i;
        //4个筷子,4个哲学家
        Philosophy[] philosophy = new Philosophy[4];
        Chopstick[] chopstick = new Chopstick[4];
        //实例化
        for(i=0;i<4;i++){
            chopstick[i] = new Chopstick();
        }
        //实例化
        for(i=0;i<4;i++){
            philosophy[i] = new Philosophy(chopstick[i],chopstick[(i+1)%4],i);
        }
        //开启进程
        for(i=0;i<4;i++){
            philosophy[i].start();
        }
    }
}

发布了76 篇原创文章 · 获赞 2 · 访问量 2123

猜你喜欢

转载自blog.csdn.net/weixin_43476969/article/details/103992742
今日推荐