¿Qué es?
Es una
secuencia de código en ejecución dentro del contexto de un proceso.
Diferencia con procesos
La
diferencia entre un hilo y un proceso es que el proceso, al crear un hijo, se
duplica y tiene su espacio de direcciones, compitiendo en igualdad de
condiciones con el proceso padre. Sin embargo, en un hilo (o proceso ligero) lo que hace el proceso
es crear un espacio de direcciones dentro de su espacio de direcciones, por lo
que la pugna por competir por el tiempo de procesador se verá en “inferioridad
de condiciones” respecto a un proceso padre – hijo.
Ventajas
Al tener un
marco común es fácil crear una variable y que varios procesos accedan a él.
Desventajas
Le tocará
menos tiempo de CPU que a un proceso padre – hijo.
Hilos en Java
En Java hay
dos formas de implementar hilos.
Una es
mediante la clase Thread y otra
mediante la Interface Runnable. En cualquiera de los dos
casos hay que implementar el método run(),
que será el que contendrá la acción que debe realizar el hilo.
Aparte del
método run() hay otros métodos
dentro de la clase Thread que
tendremos que usar:
- start() Es el método que invocaremos para que se cree el hilo
- stop() Para detener el hilo
- sleep(long milisegundos) Duerme el hilo durante el tiempo pasado en milisegundos
- yield() Hace que el hilo en ejecución deje la ejecución para permitir que otros hilos se ejecuten.
Ver más
métodos en http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
Ejemplo de código en
Java
En el
siguiente código vamos a ver una clase que herede de Thread (HiloEjemplo) donde estarán los métodos y propiedades que
estimemos oportunos y que tendrá que implementar obligatoriamente el método run().
La segunda
clase será la que contenga el código principal (Main). Creará un objeto de esta
clase y será donde se lance el objeto.
ARCHIVO HILOEJEMPLO.JAVA
public class
HiloEjemplo extends Thread {
// Propiedades
private int c; // Contador de cada hilo
private int hilo;
// Constructor
public HiloEjemplo(int hilo){
this.hilo = hilo;
System.out.println("CREANDO HILO:
" + hilo);
}
// Métodos
public void run(){
c = 0;
while (c <= 5){
System.out.println("Hilo:
" + hilo + " C = " + c);
c++;
}
} // fin del run
}
ARCHIVO MAIN.JAVA
public class Main {
public static void main(String[] argrs){
HiloEjemplo h = null;
for (int i = 0; i < 3; i++){
h = new HiloEjemplo(i+1); // Se
crea el hijo
h.start(); // Se inicia el hijo
}
System.out.println("3 HILOS
CREADOS...");
} // fin del main
} // fin de clase
Si pruebas
a lanzar la ejecución varias veces verás que el resultado que se muestra por
pantalla es variable. Esto es porque actualmente no controlamos el orden en el
que los hilos entrán en la CPU.
Ejercicio. Crea dos clases (hilos) Java que
extiendan la clase Thread. Uno de los hilos debe visualizar por pantalla en un
bucle infinito la palabra TIC y el
otro hilo la palabra TAC.
Dentro del
bucle utiliza el método sleep() para
que nos dé tiempo a ver las palabras que se imprimen cuando lo ejecutamos
(tendrás que añadir un bloque try-catch
para capturar la excepción InterruptedException).
Crea después la clase Main que haga uso de los hilos anteriores. ¿Se visualizan
los textos de forma ordenada (es decir TIC
TAC TIC TAC TIC TAC…)?
la respuesta no estaria de mas eh?
ResponderEliminarPuedes ver todos los ejercicios resueltos en la sección de descargas, bajándote el libro Módulo de Programación de Servicios y Procesos DAM2 Sierra de Guara.
EliminarAquí no se publicó porque la idea es conseguir que cada uno practique.
Gracias por comentar
Vamoh a investigah hehehehe
ResponderEliminar