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
Publicar un comentario