Java多线程 - 哲学家就餐问题

public class ChopStick {
}
public class Philosopher extends Thread{

    private String name;

    private Integer index;

    private ChopStick left;

    private ChopStick right;

    public Philosopher(String name, Integer index, ChopStick left, ChopStick right) {
        this.setName(name);
        this.index = index;
        this.left = left;
        this.right = right;
    }

    @Override
    public void run(){
        try {
            if(index%2 == 0){
                synchronized (left){
                    TimeUnit.SECONDS.sleep(1);
                    synchronized (right){
                        TimeUnit.SECONDS.sleep(1);
                        System.out.println(index +"位哲学家吃完了");
                    }
                }
            }else{
                synchronized (right){
                    TimeUnit.SECONDS.sleep(1);
                    synchronized (left){
                        TimeUnit.SECONDS.sleep(1);
                        System.out.println(index +"位哲学家吃完了");
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
public class PhilosopherTest {

    public static void main(String[] args) {
        ChopStick c0 = new ChopStick();
        ChopStick c1 = new ChopStick();
        ChopStick c2 = new ChopStick();
        ChopStick c3 = new ChopStick();
        ChopStick c4 = new ChopStick();

        Philosopher p0 = new Philosopher("p0",0,c0,c1);
        Philosopher p1 = new Philosopher("p1",1,c1,c2);
        Philosopher p2 = new Philosopher("p2",2,c2,c3);
        Philosopher p3 = new Philosopher("p3",3,c3,c4);
        Philosopher p4 = new Philosopher("p4",4,c4,c0);

        p0.start();
        p1.start();
        p2.start();
        p3.start();
        p4.start();

    }
}

Java多线程 - 哲学家就餐问题_第1张图片

 

你可能感兴趣的:(多线程,java)