Un hilo es una tarea que puede ejecutarse simultáneamente con otras tareas. Los hilos comparten recursos como memoria y archivos con otros hilos dentro de un mismo proceso, pero cada hilo tiene su propio contador de programa y estado de CPU. Los hilos pueden cambiar entre estados como ejecución, listo y bloqueado.
2. QUE ES UN HILO
Un hilo es simplemente una tarea que puede ser ejecutada al mismo tiempo
con otra tarea.
Un thread se puede considerar como la agrupación de un trozo de programa
junto con el conjunto de registros del procesador que utiliza y una pila de
máquina.
El conjunto de los registros y de la pila de cada thread se denomina contexto.
La creación de un nuevo hilo es una característica que permite a una
aplicación realizar varias tareas a la vez (concurrentemente).
Los distintos hilos de ejecución comparten una serie de recursos tales como el
espacio de memoria, los archivos abiertos, situación de autenticación, etc.
Esta técnica permite simplificar el diseño de una aplicación que debe llevar a
cabo distintas funciones simultáneamente.
3. Los hilos de ejecución que comparten los mismos recursos, sumados a estos
recursos, son en conjunto conocidos como un proceso.
El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos
hace que cualquiera de estos hilos pueda modificar éstos.
Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato
modificado inmediatamente.
Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el
estado de la CPU (incluyendo el valor de los registros).
4. FUNCIONAMIENTO DE UN HILO
Al igual que los procesos, los hilos poseen un estado de ejecución y
pueden sincronizarse entre ellos para evitar problemas de compartición
de recursos.
Generalmente, cada hilo tiene una tarea especifica y determinada,
como forma de aumentar la eficiencia del uso del procesador.
Estados de un hilo
Los principales estados de los hilos son: Ejecución, Listo y Bloqueado.
No tiene sentido asociar estados de suspensión de hilos ya que es un
concepto de proceso.
En todo caso, si un proceso está expulsado de la memoria principal
(RAM), todos sus hilos deberán estarlo ya que todos comparten el
espacio de direcciones del proceso.
5.
6. Cambio de estados
Creación: Cuando se crea un proceso se crea un hilo para ese proceso.
Luego, este hilo puede crear otros hilos dentro del mismo proceso,
proporcionando un puntero de instrucción y los argumentos del nuevo
hilo. El hilo tendrá su propio contexto y su propio espacio de la
columna, y pasará al final de los Listos.
Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea
(salvando sus registros de usuario, contador de programa y punteros de
pila). Ahora el procesador podrá pasar a ejecutar otro hilo que esté al
principio de los Listos mientras el anterior permanece bloqueado.
Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce,
el mismo pasa a la final de los Listos.
Terminación: Cuando un hilo finaliza se liberan tanto su contexto como
sus columnas.
7. PROGRAMA DE FLUJO UNICO
Un programa de flujo único, tarea única o mono -hilo (single-thread)
utiliza un único flujo de control (thread) para controlar su
ejecución.
Muchos programas no necesitan la potencia o utilidad de multiples
tareas.
public class HolaMundo{
public static void main (string args[]){
System.out.println( " Hola Mundo " );
}
}
Aqui, Cuando se llama al main(), la aplicación imprime el mensaje y
termina. Esto ocurre dentro de una única tarea (thread).
8. PROGRAMAS DE FLUJO MÚLTIPLE
un programa multihilo(Flujo múltiple) permite que cada thread
comience y termine tan pronto como sea posible.
Este comportamiento presenta una mejor respuesta a la entrada en
tiempo real.
9. // Definimos unos sencillos hilos. Se detendrán un rato
// antes de imprimir sus nombres y retardos
class TestTh extends Thread {
private String nombre;
private int retardo;
// Constructor para almacenar nuestro nombre
// y el retardo
public TestTh( String s,int d ) {
nombre = s;
retardo = d; }
// El metodo run() es similar al main(), pero para
// threads. Cuando run() termina el thread muere
public void run() {
// Retasamos la ejecución el tiempo especificado
try {
sleep( retardo );
} catch( InterruptedException e ) { }
// Ahora imprimimos el nombre
System.out.println( "Hola Mundo! "+nombre+" "+retardo );
}
}
10. public class MultiHola {
public static void main( String args[] ) {
TestTh t1,t2,t3;
// Creamos los threads
t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) );
t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) );
t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) );
// Arrancamos los threads
t1.start();
t2.start();
t3.start();
}
}
11. Creación de un hilo
Si la clase está destinada a ser ejecutado como un hilo, se puede lograr esto
mediante la implementación de una interfaz Runnable . Usted tendrá que
seguir tres pasos básicos
12. Paso 1
Como primer paso, es necesario implementar un método run () proporcionado
por Runnable . Este método proporciona un punto de entrada para el hilo y le
podemos poner lo que necesitamos dentro del metodo. A continuación se
presenta una sintaxis sencilla del método run () -
public void run( )
13. Paso 2
Como segundo paso, una instancia de un hilo objeto mediante el siguiente
constructor –
Thread(Runnable threadObj, String threadName);
Cuando, threadObj es una instancia de una clase que implementa Runnable
y threadName es el nombre dado al nuevo hilo.
14. Paso 3
Una vez que se crea un objeto Thread, se puede iniciar llamando a start()
que realiza una llamada al método run (). A continuación se presenta una
sintaxis simple método start ()
void start();