Problema con los semaforos
Publicado por Alex (7 intervenciones) el 30/05/2006 18:44:15
Wenas pues resuelta que toy intentado hacer una entrada aun reciento en el cual solo pueden acceder a el 10 hilos a la vez, estar un tiempo variable, vamos un sleep con random, pero tengo un problema a la hora de definir el <<private Semaphore sem = new Semaphore(10);>>, ya que cuando lo ejecuto el <<sem.acquire();>> no se limita a coger solo 10 dejando a los demas a la espera sino q coge los que le da la gana a veces pilla 15 otras veces mas o menos.
No se si es q es algo del jdk de la version q tengo la 1.5.06 o de que sera pero esta haciendo la puñeta, a ver si sabeis por que puede ser os pego aqui el codigo que llevo exo.
Clase Restaurante
import java.util.concurrent.*;
public class Restaurante {
//atributos
private Semaphore sem = new Semaphore(10);
public void entrar(String nombre){
System.out.println("ESPERA "+nombre);
try{
sem.acquire();
System.out.println("ENTRA "+nombre);
Thread.currentThread().getName().wait(3000);
System.out.println("SALE "+nombre);
}catch(InterruptedException e){}
}
}
La clase donde creo los hilos:
class Camiones extends Thread {
private Restaurante rest = new Restaurante();
private String nombre;
public Camiones(String nombre){
super(nombre);
this.nombre = nombre;
start();
}
public void run(){
rest.entrar(nombre);
// yield();
}
}
Y la clase donde los ejecuto:
public class Prueba{
//Constructor del camion
public static void main(String[] args){
for (int i = 1 ; i <= 50; i++)
new Camiones("CAMION "+i);
}
}
No se si es q es algo del jdk de la version q tengo la 1.5.06 o de que sera pero esta haciendo la puñeta, a ver si sabeis por que puede ser os pego aqui el codigo que llevo exo.
Clase Restaurante
import java.util.concurrent.*;
public class Restaurante {
//atributos
private Semaphore sem = new Semaphore(10);
public void entrar(String nombre){
System.out.println("ESPERA "+nombre);
try{
sem.acquire();
System.out.println("ENTRA "+nombre);
Thread.currentThread().getName().wait(3000);
System.out.println("SALE "+nombre);
}catch(InterruptedException e){}
}
}
La clase donde creo los hilos:
class Camiones extends Thread {
private Restaurante rest = new Restaurante();
private String nombre;
public Camiones(String nombre){
super(nombre);
this.nombre = nombre;
start();
}
public void run(){
rest.entrar(nombre);
// yield();
}
}
Y la clase donde los ejecuto:
public class Prueba{
//Constructor del camion
public static void main(String[] args){
for (int i = 1 ; i <= 50; i++)
new Camiones("CAMION "+i);
}
}
Valora esta pregunta


0