Implementación utilizando Monitores Cuando el programa inicia, crea la clase Palitos, que es la encargada de administrar los palitos para comer. Esta clase garantinza la exclusión mutua utilizando Monitores. La clase Palitos se tiene dos métodos, uno para obtener los palitos que le corresponden a cada comensal y otro para soltarlos. Ambos métodos utilizan el concepto de monitor. Cuando algun comensal pide sus palitos, queda a la espera de que estén libre en un loop y llamando a wait(), que lo hace dormir. Cuando es despertado y puede finalmente tomar ambos palitos, los setea en TRUE para indicar que está en uso. La llamada a wait() hace que otro hilo pueda ingresar a la sección crítica, bloqueando al proceso que llamó al wait. El método solarPalitos no hace un loop con el wait, ya que no hay manera de que dos procesos llamen el método para liberar los mismo palitos. Primero libera los palitos (seteandolos en FALSE) y luego hace una llamada a notify() para que se despierte un thread que esté esperando. La lógica de los filosofos, representada por la clase del mismo nombre, es similar a las demás. Empiezan pensando y luego trata de obtener los palitos y cuando lo hace pasa a comer. En todas las acciones siempre se queda un tiempo aleatoreo. El programa principal crea primero el monitor de palitos y luego los N filósofos pasándole por parámetro que palitos tiene a su lado y el Monitor.