Los hilos en Java permiten que un programa realice múltiples tareas simultáneamente. Un hilo es un subproceso ligero que depende de un programa principal para recursos. Para crear un hilo, se extiende la clase Thread y se sobrescribe el método run(). Luego se inicia el hilo llamando a su método start(). Los hilos pueden detenerse cambiando una bandera booleana dentro del bucle del método run().
Los hilos en Java permiten que un programa realice múltiples tareas simultáneamente. Un hilo es un subproceso ligero que depende de un programa principal para recursos. Para crear un hilo, se extiende la clase Thread y se sobrescribe el método run(). Luego se inicia el hilo llamando a su método start(). Los hilos pueden detenerse cambiando una bandera booleana dentro del bucle del método run().
Los hilos en Java permiten que un programa realice múltiples tareas simultáneamente. Un hilo es un subproceso ligero que depende de un programa principal para recursos. Para crear un hilo, se extiende la clase Thread y se sobrescribe el método run(). Luego se inicia el hilo llamando a su método start(). Los hilos pueden detenerse cambiando una bandera booleana dentro del bucle del método run().
A veces necesitamos que nuestro programa Java realice varias
cosas simultneamente. Otras veces nuestro programa tiene que realizar tareas pesadas que hacen que el programa tarde mucho o que se quede parada. Para conseguir que Java realice varias cosas a la vez o que no se pare el programa se utilizan los hilos (Threads). Los hilos son conocidos o llamados procesos ligeros. Un hilo es muy similar a un proceso pero con la diferencia de que un hilo siempre corre cuando existen varias acciones. Por el contrario, los procesos mantienen su propio espacio de direcciones y entorno de operaciones. Los hilos dependen de un programa padre en lo que se refiere a recursos de ejecucin. Los Sistemas Operativos de hoy en da son multitarea o multiproceso, es decir, permiten realizar varias tareas simultneamente. Por ejemplo: se puede estar viendo el correo en una aplicacin cliente, imprimiendo un documento y escuchando mp3 al mismo tiempo. El concepto central para un Sistema Operativo de estas caractersticas es el de "proceso". Para lograr esta funcionalidad, se requiere que la Unidad Central de Procesos (UCP o CPU) pueda alternar entre un proceso u otro en un ciclo o tiempo corto; esto se conoce como "tiempo compartido". En Java los hilos estn en el paquete. java.lang.thread Crear un Hilo
Crear un hilo en java es una tarea muy sencilla. Basta heredar de
la clase Thread y definir el mtodo run(). Luego se instancia esta clase y se llama al mtodo start() para que arranque el hilo. public MiHilo extends Thread { public void run() { // Aqu el cdigo pesado que tarda mucho } }; ... MiHilo elHilo = new MiHilo(); elHilo.start(); System.out.println("Texto"); // Se instancia el hilo con un new MiHilo() y lo arrancamos con el elHilo.start(). El system.out que hay detrs se ejecutara inmediatamente despus del start(), haya terminado o no el cdigo del hilo. Detener un hilo Suele ser una costumbre bastante habitual que dentro del mtodo run() haya un bucle infinito, de forma que el mtodo run() no termina nunca. Para esto los Thread de java tienen muchos mtodos para parar un hilo: destroy(), stop(), suspend(), entre otros Pero si se ve observa desde el punto de vista application programming interface (API) que utiliza un diseo basado en objetos, seguir con el bucle infinito. Todos esos mtodos son inseguros, estn obsoletos, desaconsejados o las tres cosas juntas.
Para poder detener el hilo se crea un private bolean continuar que
sea igual a un true, que se cambiara a un false cuando queramos para el hilo. Tambin se crea un metodo elHilo.detenElHilo(); donde a continuar ser igual a un false para cuando se ejecute el mtodo mencionado, termine con el hilo. En el mtodo run() se crea un while para que mientras continuar sea igual a un true, siga el bucle pero si es un false, terminara el hilo. En este caso, se instancia el objeto creado con el mtodo run() para que arranque el hilo y cuando queramos terminar el hilo, ejecutamos el mtodo elHilo.detenElHilo(). MiHilo elHilo = new MiHilo(); elHilo.start(); // Ya tenemos el hilo arrancado ... // Ahora vamos a detenerlo elHilo.detenElHilo(); Control de la Ejecucin de una Thread Varios mtodos de la clase java.lang.Thread controlan la ejecucin de una thread. Mtodos de uso comn: void start(): usado para iniciar el cuerpo de la thread definido por el mtodo run(). void sleep(): pone a dormir una thread por un tiempo mnimo especificado. void join(): usado para esperar por el trmino de la thread sobre la cual el mtodo es invocado, por ejemplo por trmino de mtodo run().
void yield(): Mueve a la thread desde el estado de corriendo al
final de la cola de procesos en espera por la UCP Ciclo de Vida de una Thread Cada hilo, despus de su creacin y antes de su destruccin, estar en uno de cuatro estados: Nuevo, Ejecutable, Muerto o Bloqueado.
1. Nuevo: se ha creado el objeto hilo pero todava no se ha
arrancado, por lo que no se puede ejecutar. 2. Ejecutable: Significa que el hilo puede ponerse en ejecucin cuando el mecanismo de reparto de tiempos de UCP tenga ciclos disponibles para el hilo. Por consiguiente, el hilo podra estar o no en ejecucin, pero no hay nada para evitar que sea ejecutado si el planificador as lo dispone; no est ni muerto ni bloqueado. 3. Muerto: la forma normal de morir de un hilo es que finalice su mtodo run(). Tambin se puede llamar a stop(), pero esto lanza una excepcin que es una subclase de Error (lo que significa que no hay obligacin de poner la llamada en un bloque by). Recurdese que el lanzamiento de una excepcin debera ser un evento especial y no parte de la ejecucin normal de un programa.
4. Bloqueado: podra ejecutarse el hilo, pero hay algo que lo evita.
Mientras un hilo est en estado bloqueado, el planificador simplemente se lo salta y no le cede ningn tipo de UCP hasta que el hilo no vuelva al estado ejecutable no har ninguna operacin.