Código de Java - Observador de procesos

Imágen de perfil
Val: 491
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Observador de procesosgráfica de visualizaciones


Java

estrellaestrellaestrellaestrellaestrella(2)
Publicado el 16 de Febrero del 2019 por Rafael Angel
549 visualizaciones desde el 16 de Febrero del 2019. Una media de 35 por semana
Un ejemplo muy básico acerca de como crear un observador de procesos.
Hace un tiempo había publicado un ejemplo de un consumidor de datos usando hilos.
Pero en esta entrega, estoy publicando un observador, el cual permite establecer un orden de ejecucion de los hilos.

Requerimientos

NetBeans 8.2

1.0
estrellaestrellaestrellaestrellaestrella(2)

Publicado el 16 de Febrero del 2019gráfica de visualizaciones de la versión: 1.0
550 visualizaciones desde el 16 de Febrero del 2019. Una media de 35 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Dos clases internas que funcionan como proceso y observador o arbitro.
Se crean dos instancias de hilos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
 * 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();
    }
}



Comentarios sobre la versión: 1.0 (2)

Imágen de perfil
16 de Febrero del 2019
estrellaestrellaestrellaestrellaestrella
Excelente!!!
Responder
Imágen de perfil
17 de Febrero del 2019
estrellaestrellaestrellaestrellaestrella
Gracias.
Responder

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s5129
Revisar política de publicidad