3.3 CREACION Y CONTROL DE HILOS

3.3 Creación y control de hilos.
3.3.1. Atributos de hilos.

   Los atributos o propiedades de un hilo varían de una implementación a otra. Sin embargo, de forma general los atributos que definen un thread son:
  • Estado de espera:  permite que otros hilos, esperen hasta que termine de ejecutarse un hilo en especial.
  • Dirección de stack. apuntador al inicio del stock del hilo.
  • Tamaño de la dirección: longitud del stock del hilo.
  • Alcance (scope): define quien controla la ejecución del hilo: el proceso o el núcleo del sistema operativo.
  • Herencia:  los parámetros de calendarización son heredados o definidos localmente.
  • Política de calendarización: se define que proceso se va a ejecutar y en qué instante.
  • Prioridad: un valor de prioridad alto corresponde a una mayor prioridad.
 3.3.2. Creación de hilos.

   En Java, existen dos mecanismo que nos permiten la creación de hilos:
  • Implementando la interfaz Runnable
  • Extendiendo la clase Thread, es decir, creando una subclase de ésta.  
   En cualquiera de los dos casos, se debe definir un método run que será el que incluya las instrucciones que se ejecutarán en el thread (hilo) y se pueden definir prioridades aunque no se puede confiar en que la máquina virtual escoja para ejecutar, siempre, el de mayor prioridad, por lo que no se pueden utilizar para basar en ellas el scheduler de un sistema en tiempo real.

   La clase Thread.

class Repeticion extends Thread {
          private int repeticiones;
          private String mensaje;
          Repeticion (String msg, int n) {
                mensaje = msg;
                repeticiones = n;
                }
         public void run() {
               for (int i= 1; i <= repeticiones; i++)
              System.out.println (mensaje + "  " +i);
              }
         public static vouid main (String args [ ] {
             Repeticion r1 = new Repeticion ("Rojo", 5);
             Repeticion r2 = new Repeticion ("Azul", 80);
             r1.start();
             r2.start();
             }
         }

   Cuando creamos un hilo extendiendo la clase Thread, se pueden heredar los métodos y variables de la clase padre. Si es así, una misma subclase solamente puede extender o drivar una vez la clase padre Thread. Esta limitación de Java puede ser superada a través de la implementación de Runnable que es una interfaz.

   La interfaz Runnable.

class Repeticion2 implements Runnable {
        private int repeticiones;
        private String mensaje;
        Repeticion2 (String msg, int n) {
              mensaje = msg;
              repeticiones = n;
              }
        public void run ( ) {
              for (int i=1; i<= repeticiones; i++;)
              System.out.println(mensaje  + "  " + i);
              }
         public static void main (String args [ ]) {
                  Repeticion r1 = new Repeticion ("Rojo", 5);
              Thread r2 = new Thread (new Repeticion2 ("Azul", 80))
               r1.start ();
               r2.start ();
               }
            }

3.3.3. Arranque de hilos.
   Como se pudo apreciar en los ejemplos anteriores, el arranque de un hilo debe realizarse dentro del método principal de Java, que como todos sabemos, es el método main. Y lo arrancamos llamando al método start.

                  r1.start ( );

start, es el método oculto en el hilo cuya función es llamar al método run.

3.3.4. Manipulación de hilos.

   Una vez que realizamos la creación de un hilo, éste debe contener una traza de ejecución válida, la cual controlaremos en el método run del objeto.

   El cuerpo de ésta función (las acciones del hilo), vienen a ser el cuerpo del programa. Es como referirnos a la rutina main pero a nivel del hilo. Es decir, todas las acciones que nos interesa que nuestro hilo realice, deben estar especificadas en el método run. Al terminar de ejecutarse el método run, también terminará la ejecución de nuestros hilos.

   Por lo anterior, la manipulación de nuestro hilos, se realiza dentro del método run.

3.3.5. Suspensión de hilos.
   También podemos realizar la suspensión de un hilo, es decir, detenerlo o desactivarlo  por un intervalo de tiempo indeterminado, para ésto utilizamos la función suspend.

   Este método no detiene la ejecución en forma permanente. El hilo es suspendido indefinidamente y para volver a activarlo nuevamente es necesario realizar una invocación a la función resume.

   Es importante mencionar, que también existe la función sleep, pero en ésta se especifica el tiempo en milisegundos en el que el hilo permanecerá "dormido" y al término de éste tiempo el hilo continua ejecutándose.

3.3.6. Parada de hilos.

   El método que debemos utilizar para detener la ejecución de nuestro hilo, es stop, el cual detendrá la ejecución en forma permanente.

        t1.stop();

   Este método no destruye el hilo, simplemente detiene su ejecución y ésta no puede ser reanudada con el método start.

   Su utilidad tiene sentido, sobre todo, en aplicaciones complejas que necesiten un control sobre cada uno de los hilos que se ejecuten.

Comentarios

Entradas más populares de este blog

3.4 SINCRONIZACION DE HILOS COMPUTACION

3.2 COMPARACION DE UN PROPGRAMA DE FLUJO UNICO CONTRA UNO DE FLUJO MULTIPLE