La cena de los filosofos JAVA
/*
* Pueden estar comiendo 2 filósofos a la vez: * El filósofo 0 puede comer con el filósofo 2 o con el 3. * El filósofo 1 puede comer con el filósofo 3 o con el 4. …ver más…
A cada uno se le da un único permiso: for (int i = 0; i < numeroFilosofos; i++) { // Sólo 1 permiso porque cada palillosemaforo solo puede tenerlo un filósofo a la vez. palillos_semaforo[i] = new Semaphore(1); } // Crear los objetos de tipo Filosofo que extienden Thread, e iniciarlos. // Al constructor se le pasa un id, el array de los semaforos // y el array de sus 2 palillos: for (int idFilosofo = 0; idFilosofo < numeroFilosofos; idFilosofo++) { new Filosofo(idFilosofo, palillos_semaforo, palillosFilosofo).start(); } } } CLASE FILOSOFO package cena; import java.util.Random; import java.util.concurrent.Semaphore; /** * Hilo filósofo. Su método run() realiza un bucle infinito que consite en * invocar a los métodos pensar() y comer(): ... >; pensar >; comer ... *
* @author netsis.es */ public class Filosofo extends Thread { /** * Índice que identifica al filósofo (un entero del 0 al 4) */ private final int idFilosofo; /** * Array de semáforos. Cada semáfaro es un palillo. */ private final Semaphore[] palillos_semaforo; /** * Array de enteros 2 dimensiones. Por cada valor de su primer índice * (filas) almacena los palillos que necesita el filósofo de ese índice para * comer. Por ejemplo: el filósofo de índice 0