Vale, ya tengo la solución, funciona y es lo que busco, salvo por un pequeño problema.
He aqui el código ejemplo:
Código:
package pruebas3;
import java.util.Random;
public class MiPrueba {
public static void main(String args[]){
class Objeto{
private boolean estado = false;
public boolean getEstado(){
return estado;
}
public void setEstado(boolean estado){
this.estado = estado;
}
}
final Objeto ob = new Objeto();
Thread hilo1 = new Thread(new Runnable(){
public void run(){
System.out.println("Principio HILO 1");
if(ob.getEstado() == false){
try{
wait();
}catch(InterruptedException e){}
}
else
System.out.println("Fin HILO 1");
}
});
Thread hilo2 = new Thread(new Runnable(){
public void run(){
try{
System.out.println("Principio HILO 2");
Random rnd = new Random(2);
int x;
do{
ob.setEstado(false);
x = rnd.nextInt(6);
System.out.println("Aleatorio: "+x);
}while(x != 2);
ob.setEstado(true);
System.out.println("Fin HILO 2");
notifyAll();
}catch(Exception e){}
}
});
hilo1.start();
hilo2.start();
}
}
El problema reside en que al parecer se necesitan varias ejecuciones para que ambos threads terminen, ya que
notifyAll() no parece generar una respuesta firme en todos los casos, y como consecuencia
hilo1 se queda en ocasiones esperando.
¿Cómo puedo solucionarlo?