2 import java.util.Random;
7 /* Infica si un palito esta ocupado */
8 private boolean[] palitos;
9 // private Variable[] cond_palitos;
13 palitos = new boolean[n];
14 //cond_palitos = new ConditionVariable[n];
17 public synchronized boolean obtenerPalito (int i)
19 /* Espero a que el palito "i" sea liberado */
22 wait () ; //cond_palitos[i]);
24 catch (Exception e) {}
33 public synchronized boolean soltarPalito (int i)
37 /* Despierto 1 thread que este esperando por este
46 class Filosofo extends Thread
50 private int comidas_actuales;
53 private Palitos palitos;
54 private Random r = new Random ();
56 Filosofo (String _id, int cant_comidas, int _izq, int _der, Palitos p)
59 comidas = cant_comidas;
68 while (comidas_actuales < comidas) {
70 agarrarPaloIzquierdo ();
71 agarrarPaloDerecho ();
74 System.out.println ("Listo el pollo "+id);
79 int n = r.nextInt (5) + r.nextInt (2);
80 System.out.println ("Soy " + id + " y estoy comiendo por " + (new Integer(n)).toString ());
83 Thread.sleep (n*1000);
84 } catch (Exception e) {}
90 int n = r.nextInt (5) + r.nextInt (2);
91 System.out.println ("Soy " + id + " y estoy pensando por " + (new Integer(n)).toString ());
93 Thread.sleep (n*1000);
94 } catch (Exception e) {}
98 public void agarrarPaloIzquierdo ()
100 if (palitos.obtenerPalito (izq))
101 System.out.println ("Soy " + id + " y estoy agarrando el palizo izquierdo.");
103 System.out.println ("IZQ-ERROR?? : Creo que no deberia llegar aca.");
106 public void agarrarPaloDerecho ()
108 if (palitos.soltarPalito (der))
109 System.out.println ("Soy " + id + " y estoy agarrando el palizo derecho.");
111 System.out.println ("DER-ERROR?? : Creo que no deberia llegar aca.");
115 public class filosofos3
117 static public void main (String[] args)
123 if (args.length < 2) {
124 /* Java parece no poner en args[0] el caller -.- .. Java Sucks :P */
125 System.out.println ("Modo de uso: java filosofo3 <Cantidad de chinos invitados a la fiesta> <Cantidad de rondas que estara pensando o comiendo cada chino>");
128 n = Integer.parseInt (args[0]);
130 System.out.println ("Debe haber por lo menos 2 chinos");
134 cant = Integer.parseInt (args[1]);
136 Palitos p = new Palitos (n);
137 for (i=0; i<n; i++) {
138 String s = (new Integer(i)).toString ();
139 Filosofo f = new Filosofo (s, cant, i, (i+1)%n, p);