diff --git a/pp.A1-CondPhilosophers/src/main/java/pp/Philosopher.java b/pp.A1-CondPhilosophers/src/main/java/pp/Philosopher.java index 74d1450..68dd21d 100644 --- a/pp.A1-CondPhilosophers/src/main/java/pp/Philosopher.java +++ b/pp.A1-CondPhilosophers/src/main/java/pp/Philosopher.java @@ -3,43 +3,53 @@ package pp; import java.util.Random; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; public class Philosopher extends Thread implements IPhilosopher { private int seat; private Philosopher rechts; private Philosopher links; private Lock table; - private Condition condition ; + private Condition condition; private volatile boolean stopped; private volatile boolean eating; private final Random random; - + public Philosopher() { - this.random = new Random(); + this.random = new Random(); this.seat = 0; this.stopped = false; } - @Override - public void run() { - try { - while (this.stopped == false) { - think(); - eat(); - } - } catch (InterruptedException e) { - // Thread was interrupted, exit gracefully - } - } + public static void main(String... args) { + + // TODO + } + + @Override + public void run() { + try { + while (this.stopped == false) { + think(); + eat(); + } + } catch (InterruptedException e) { + // Thread was interrupted, exit gracefully + } + } + private void eat() throws InterruptedException { table.lock(); try { - - while(this.links.eating || this.rechts.eating) + + while (this.links.eating || this.rechts.eating) { + log(seat, " : isst gerade!"); this.condition.await(); - this.eating = true; - }finally { + } + + this.eating = true; + } finally { table.unlock(); } Thread.sleep(this.random.nextInt(PhilosopherExperiment.MAX_EATING_DURATION_MS)); @@ -57,7 +67,6 @@ public class Philosopher extends Thread implements IPhilosopher { e.printStackTrace(); } } - @Override public void setLeft(IPhilosopher left) { @@ -82,14 +91,17 @@ public class Philosopher extends Thread implements IPhilosopher { public void setTable(Lock table) { // TODO Auto-generated method stub this.table = table; - condition = this.table.newCondition(); + condition = this.table.newCondition(); } @Override public void stopPhilosopher() { - + this.stopped = true; interrupt(); } + + + }