/**
* Ejemplo de un ovservador de procesos de hilos.
* No tiene interfas grafica porque es un ejemplo muy simple.
* Fecha: Viernes 15 de febrero del 2019.
* @author Rafael Angel Montero Fernández
*/
public class Ejemplo_ovservador {
/**
* Para lanzar mensajes de dapuracion facilmente.
* @param datos
*/
public void msj(String datos){
System.out.println(datos);
}
/**
* Clase para monitorear los procesos.
*/
public class Observador{
/**
* Constructor bacio.
*/
public Observador(){
}
/**
* Proceso que se esta ejecutando.
*/
private int proceso_activo=0;
public synchronized void decir( int proceso_seleccionado, String mensaje){
try{
while(this.proceso_activo!=proceso_seleccionado){
wait();//Esperando.
}
}catch(Exception ex){
msj(ex.getLocalizedMessage());
}
msj(mensaje);
proceso_activo = (proceso_activo + 1) % 2;
notifyAll();
}
}
/**
* Clase para el proceso, o mejor dicho los procesos ya que se realizará más de una instancia.
*/
public class Hilo extends Thread{
/**
* Al llegar a cero se detiene el proceso.
*/
private int conteo=10;
/**
* Proceso que se esta ejecutando.
*/
private int proceso_activo=0;
/**
* Instancia del ovservador de procesos.
*/
private Observador observador;
/**
* Datos que se mostraran en el proceso seleccionado.
*/
private String datos_a_mostrar="";
@Override
public void run(){
try{
this.observador.decir(proceso_activo, datos_a_mostrar + "\n");
sleep(200);
conteo--;
if(conteo>0){
run();
}else{
msj("Proceso " + this.observador.proceso_activo + " detenido");
}
}catch(InterruptedException ex){
msj(ex.getLocalizedMessage());
}
}
/**
*
* @param orden_de_seleccion Un numero int para indicar en que orden se ejecutara el hilo.
* Siempre debe empesar con cero.
* @param nuevo_ovservador Un objeto o instancia Observador con datos.
* @param datos Datos a mostrar en pantalla cuando el proceso sea seleccionado.
*/
public Hilo(int orden_de_seleccion, Observador nuevo_ovservador, String datos){
observador=nuevo_ovservador;
this.datos_a_mostrar=datos;
this.proceso_activo=orden_de_seleccion;
}
}
public void ejecutar_ejemplo(){
Observador observador=new Observador();
//Tal y como se dijo en el argumento, la primera instancia debe pasar cero como argumento por defecto.
//Claro a menos que la variable se inicialice en 1 o cualquier otro numero.
Hilo hilo_1=new Hilo(0, observador, "Yo soy el hilo 1, el primero");
hilo_1.start();
Hilo hilo_2=new Hilo(1, observador, "Yo soy el hilo 2, el ultimo");
hilo_2.start();
}
//////////////////////////////////////////////////////////////////
/**
* El main para ejecutar el ejemplo.
* @param args Argumentos desde la linea de comandos.
*/
public static void main(String args[]){
Ejemplo_ovservador ejemplo=new Ejemplo_ovservador();
ejemplo.ejecutar_ejemplo();
}
}
Se crean dos instancias de hilos.