public void run() { Random randomGenerator = new Random(); try { while (true) { // Thread.sleep(randomGenerator.nextInt(100)); //not sleeping but thinking int leftHash = System.identityHashCode(left); int rightHash = System.identityHashCode(right); if (leftHash < rightHash) { System.out.println("Phil " + index + " finishes thinking."); left.pickup(); System.out.println("Phil " + index + " picks up left fork."); right.pickup(); System.out.println("Phil " + index + " picks up right fork."); Thread.sleep(randomGenerator.nextInt(100)); // eating System.out.println("Phil " + index + " finishes eating."); left.putdown(); System.out.println("Phil " + index + " puts down left fork."); right.putdown(); System.out.println("Phil " + index + " puts down right fork."); } else { System.out.println("Phil " + index + " finishes thinking."); right.pickup(); System.out.println("Phil " + index + " picks up left fork."); left.pickup(); System.out.println("Phil " + index + " picks up right fork."); Thread.sleep(randomGenerator.nextInt(100)); // eating System.out.println("Phil " + index + " finishes eating."); right.putdown(); System.out.println("Phil " + index + " puts down left fork."); left.putdown(); System.out.println("Phil " + index + " puts down right fork."); } } } catch (InterruptedException e) { System.out.println("Don't disturb me while I am sleeping, well, thinking."); } }