eterno wait() ?
Publicado por Depunsher (7 intervenciones) el 16/08/2009 21:02:07
Hola a todos, quería saber porque me produce un wait() eterno en el segundo hilo que entra lo que hace que no salga nunca de la pista y no puedan entrar otros a jugar.
Muchas gracias de antemano, el código es:
public synchronized void entraMujer(deportista nuevoDep){
//establezco duracion del partido
long partido = duracionPartido();
try {semM.acquire();} catch (InterruptedException e){}
if( procesoParado() ) try {proc1.acquire();} catch (InterruptedException e){}
actualizaDejaCola(nuevoDep);
if (getEstado() == "Abierto") //si esta abierta la sala, entra
{
actualizaEntraMujer(nuevoDep);
while (numM==1){
try{
nuevoDep.setEstado("Esperando compañera");
wait();
}catch(InterruptedException e){
JOptionPane.showMessageDialog(null,"Error: "+e.getMessage(),"Error",JOptionPane.INFORMATION_MESSAGE);
}
notify();
}
//ETERNO WAIT() !!!!!!!!!!!!!!!!!!!!!!!!!!
nuevoDep.setEstado("Jugando Tenis");
try {nuevoDep.sleep(partido);} catch (InterruptedException e1){}
actualizaSaleMujer(nuevoDep);
estado=false; //la primera q salga la cierra, y la ultima la abre, para la siguiente
//libero semáforos
semM.release();
}
}
Muchas gracias de antemano, el código es:
public synchronized void entraMujer(deportista nuevoDep){
//establezco duracion del partido
long partido = duracionPartido();
try {semM.acquire();} catch (InterruptedException e){}
if( procesoParado() ) try {proc1.acquire();} catch (InterruptedException e){}
actualizaDejaCola(nuevoDep);
if (getEstado() == "Abierto") //si esta abierta la sala, entra
{
actualizaEntraMujer(nuevoDep);
while (numM==1){
try{
nuevoDep.setEstado("Esperando compañera");
wait();
}catch(InterruptedException e){
JOptionPane.showMessageDialog(null,"Error: "+e.getMessage(),"Error",JOptionPane.INFORMATION_MESSAGE);
}
notify();
}
//ETERNO WAIT() !!!!!!!!!!!!!!!!!!!!!!!!!!
nuevoDep.setEstado("Jugando Tenis");
try {nuevoDep.sleep(partido);} catch (InterruptedException e1){}
actualizaSaleMujer(nuevoDep);
estado=false; //la primera q salga la cierra, y la ultima la abre, para la siguiente
//libero semáforos
semM.release();
}
}
Valora esta pregunta


0