DiningPhilosphers.java

Published in DevCode 2001. Original code and wording are preserved.

//7.9
//February 11, 2004
//Dining Philosphers Problem Using Java Synchronization
import java.net.*;
import java.io.*;
import java.lang.*;
import java.math.*;
import java.awt.*;
import java.util.*;
public class DiningPhilosphers
{

    boolean[] C = new boolean [5];
    static final int THINKING = 0;
    static final int HUNGRY = 1;
    static final int EATING = 2;
    int[] state;

    public DiningPhilosphers (int[] state)
    {
        this.state = state;
        for(int i=0; i < 5; i++)
            state[i] = THINKING;
        for(int j = 0; j < 5; j++)
            C[j] = false;
    }

    public synchronized int pickUp (int i, int[] state){

        state[i] = HUNGRY;
        test(i, state);
        if (state[i] !=EATING )
        {

            System.out.println(i + "could NOT Eat");
            SleepUtilities.nap();
            return state[i];


        }

        return state[i];
    }
    public synchronized int putDown (int i, int state[]) {

        state[i] = THINKING;
        C[i] = false;
        C[(i+1)%5] = false;
        System.out.println(i + "is now Thinking");
        return state[i];

    }

    private int test (int i, int state[]) {

        if((C[i] != true) && (C[(i+1)%5] != true) &&( state[i] == HUNGRY))
        {
            state[i] = EATING;
            C[i] = true;
            C[(i+1)%5] = true;
            System.out.println(i + "is now Eating");

            return state[i];

        }
            return state[i];

    }


}