My code is
package diningphilosophers;
class DiningPhilosophers { // Η κλάση αναπαριστά την εφαρμογή
static Philosopher philosopher[];
static Forks forks;
static DiningRoom diningRoom;
public static void main(String[] argv) {
philosopher = new Philosopher[5];
forks = new Forks();
diningRoom = new DiningRoom();
for(int i = 0; i < 5; i++)
philosopher[i] = new Philosopher(i, 10, 20, 30, 100);
for(int i = 0; i < 5; i++)
philosopher[i].start();
}
}
class Philosopher extends Thread { // Η κλάση αναπαριστά το φιλόσοφο
int i;
int minThinkTime, maxThinkTime, minEatTime, maxEatTime;
public Philosopher(int index, int minThinkTime, int maxThinkTime, int minEatTime, int maxEatTime) {
this.i = index;
this.minThinkTime = minThinkTime;
this.maxThinkTime = maxThinkTime;
this.minEatTime = minEatTime;
this.maxEatTime = maxEatTime;
}
public void think() {
try {
Thread.sleep((int)(Math.random() * (maxThinkTime - minThinkTime)) + minThinkTime);
}
catch (InterruptedException e) { }
}
public void eat() {
try {
Thread.sleep((int)(Math.random() * (maxEatTime - minEatTime)) + minEatTime);
}
catch(InterruptedException e) { }
}
@Override
public void run() {
while(true) {
think();
diningRoom.enter();
forks.take(i);
eat();
forks.release(i);
diningRoom.exit();
}
}
}
class Forks { // Η κλάση αναπαριστά έναν ελεγκτή ο οποίος χρησιμοποιείται για να διασφαλίσει
// τον αμοιβαίο αποκλεισμό στη χρήση των κοινών πόρων που είναι τα πιρούνια
private int numOfForks[];
public Forks() {
numOfForks = new int[5];
for(int i = 0; i < 5; i++)
numOfForks[i] = 2;
}
public synchronized void take(int philosopher) {
while(numOfForks[philosopher] != 2) {
try {
wait();
}
catch (InterruptedException e) { }
}
numOfForks[(philosopher + 1)%5]--;
numOfForks[(philosopher - 1)%5]--;
}
public synchronized void release(int philosopher) {
numOfForks[(philosopher + 1)%5]++;
numOfForks[(philosopher - 1)%5]++;
notifyAll();
}
}
class DiningRoom { // Η κλάση αναπαριστά μια εικονική τραπεζαρία
private int vacancy;
public DiningRoom() {
vacancy = 5 - 1;
}
public synchronized void enter() {
while (vacancy == 0) {
try {
wait();
}
catch(InterruptedExeption e) { }
}
vacancy--;
}
public synchronized void exit() {
vacancy++;
notify();
}
}
This is the dining philosophers problem. Where is my fault? I think i need an import but i don't know which.