Introducción
A veces necesitamos ejecutar tareas secundarias dentro de una aplicación que no interfieran con las tareas principales, Java da la oportunidad de realizar estas tareas en forma independiente, esto se le conoce como hilos. Nuestra aplicación corre sobre un hilo principal al cual podemos integrarle mas hilos que corren detrás de la aplicación
Cada hilo se programa como si ejecutara solo; como si la CPU fuera una sola. Algún mecanismo del sistema operativo esta dividiendo el tiempo de la CPU para la aplicación, esto que hace la programación de múltiples hilos una tarea mucho mas fácil.
Un proceso son instrucciones al CPU que se ejecuta en su propio espacio. Un sistema operativo multitarea es capas de ejecutar mas de un proceso a la vez, haciendo que parezca que cada uno esta por su cuenta, proporcionando periódicamente ciclos de CPU para cada proceso. Un hilo es un solo flujo de control dentro de un proceso. Un solo proceso puede tener múltiples hilos ejecutándose al mismo tiempo. En resumen un proceso puede contener múltiples hilos
Hay muchos usos posibles para la multitarea, pero en general, se tendrá una parte de un programa colgado por un evento en particular o recurso, y no se quiere colgar el resto del programa a causa de esto. Así es que se crea un hilo asociado con ese evento o recurso y se deja correr independientemente del programa principal. Un buen ejemplo es un botón de “salida” -no se quiere estar forzado a sondear el botón de salida en cada parte de código que se escribe y de la misma forma se quiere que tenga una buena respuesta, como si fuera verificado regularmente. De hecho, uno de las razones convincentes de forma inmediata para la multitarea es producir una interfase de buena respuesta.
Hilos en Java
Existen dos formas de implementar un hilo en java, una de ellas es heredar de java.lang.Thread, al hacer esto debemos sobrescribir el método run(), dentro de este método debemos escribir el código que queremos que se ejecute en “background”
Por ejemplo este seria el código de una clase llamada hilo en el package “Thread”:
package Thread; public class hiloThread extends Thread { public void run() { for(int i=0;i<15;i++) { try { this.sleep(100); System.out.println(”Yo soy “+this.getName()); } catch(InterruptedException e) { System.out.println(”el hilo se cayo intentando dormir”); } } } }
Notaran que se llama a una función llamada sleep(long args0) (hay que mencionar que sleep(long args0) puede causar una excepción InterruptedException ), esta función detiene el hilo, en este caso 100 milisegundos y también llamamos a una función getName() que devuelve obviamente el nombre del hilo.
Ahora este es el código del main para probar nuestro hilo
package principal; import Thread.hilo; public class main { public static void main(String[] args) { hiloThread hil=new hiloThread (); hiloThread hi2=new hiloThread (); hiloThread hi3=new hiloThread (); hil.setName(”hilo 1″); hi2.setName(”hilo 2″); hi3.setName(”hilo 3″); hil.start(); hi2.start(); hi3.start(); } }
Como notamos para iniciar el hilo no debemos llamar al método run que implementamos en nuestra clase sino vamos a llamar a un método start().Como ya he mencionado heredar de Thread convierte a la clase en un hilo, la otra forma que tiene java para implementar hilos es tener una clase con hilos adentro, para esto debemos implementar la interfaz java.lang.Runnable. Ahora intentaremos hacer un ejemplo parecido, este seria el código:
package Thread; public class hiloRunnable implements Runnable { Thread hilo; public hiloRunnable(String name) { hilo=new Thread(hiloRunnable.this); hilo.setName(name); } @Override public void run() { for(int i=0;i<15;i++) { try { hilo.sleep(100); System.out.println("Yo soy "+hilo.getName()); } catch(InterruptedException e) { System.out.println("el hilo se cayo intentando dormir"); } } } public void start() { this.hilo.start(); } }
Como vemos hemos construido un objeto de tipo Thread que el constructor recibe como parámetro una clase que implemente java.lang.Runnable, aparte hemos construido un metodo start() que llame al método this.hilo.start(); este seria el codigo del main
package principal; import Thread.hiloRunnable; public class main { public static void main(String[] args ) { System.out.println("Implementando Runnable"); hiloRunnable hil =new hiloRunnable("hilo 1"); hiloRunnable hi2 =new hiloRunnable("hilo 2"); hiloRunnable hi3 =new hiloRunnable("hilo 3"); hil.start(); hi2.start(); hi3.start(); } }
En un futuro post intentaremos trabajar con varios hilos al mismo tiempo, y resolver varios problemas como concurrencia y sincronización de hilos, aparte de hilos en .Net










Gracias quimera x esta excelente explicacion…!
muy complicado si prodrias ser mas especifico:: trate de compilar y no me sale ::
algo mas sencillo para entender de lo especifico a lo general:: no de lo general a lo especifico;; gracias:
has probado el archivo al final de la pagina?