import java.util.Random;


public class philojava extends Thread {

   private static int NUMTHRDS = 5;
   public static MutexJava mutex;
   private static diningph dp;
   private int who;

   public philojava( int i ) {
      who = i;

   }


   public void run(){

      int eats, thinks;
      Random r = new Random();

      for ( int i = 0; i < 10; i++ ) {

         print( "Philo # " + who + ", round " + i + "\n" );

         dp.pickup( who);
         eats = r.nextInt( 5 ) * 1000;
         try {
            sleep( eats );
         } catch ( InterruptedException e ) {
            System.out.println( e );
         }

         dp.putdown( who);
         thinks = r.nextInt( 5 ) * 1000;
         try {
            sleep( thinks );
         } catch ( InterruptedException e ) {
            System.out.println( e );
         }
      }

      System.out.println( "Thread finishing ... " + who );

   }

   private void print( String s ) {
      mutex.Wait();	
      System.out.println( s );
      mutex.Signal();

   }

   public static void main ( String[] args ) {
      dp = new diningph();
      mutex = new MutexJava();
      for ( int i = 0; i < NUMTHRDS; i++ ) {
          philojava p = new philojava( i );
          p.start();
      }

   }

}

