Tema: Threads.
Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/05/2009, 01:15
Wolfchamane
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: Threads.

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?

Última edición por Wolfchamane; 05/05/2009 a las 01:20 Razón: modificación