public class PhilosophersMin { static final int N = 5; static Object[] forks = new Object[5]; static class Philosopher implements Runnable { int right, left; public Philosopher(int i) { right = i; left = (right+1)%N; } public void run() { synchronized(forks[Math.min(left,right)]) { System.out.println("Philosopher "+right+" has "+"fork "+Math.min(left,right)+", tries to get fork "+Math.max(left,right)); synchronized(forks[Math.max(left,right)]) { System.out.println("Philosopher "+right+" eats!"); } } } } public static void main(String[] args) { Thread[] philosopher = new Thread[N]; for(int i=0; i