package es.scjp; /** * Esta clase muestra los conceptos básicos de los hilos en Java Recordamos los * siguientes conceptos básicos: 1) Un hilo puede ser definido por la * implementación de la interfaz runnable y la implementación de su método run, * o bien por la extensión de una clase thread. 2) Un hilo tiene diferentes * estados durante su ciclo de vida, estos son los siguientes: new, runnable, * running y dead. 3) Un hilo necesita ser instanciado, y sólo puede ser * ejecutado una sola vez, con el método start. Si se intenta ejecutar de nuevo * dará una excepción de tipo RunTimeException * * @author jcarmonaloeches * @desarrolloj2ee (twitter) * */ public class HilosEnJavaParte1 { public static void main(String args[]) { Hilo1 hilo1 = new Hilo1(); Thread hilo1Thread = new Thread(hilo1); System.out.println("Estado del hilo1 después de la creación " + hilo1Thread.getState()); hilo1Thread.start(); System.out.println("Estado del hilo1 después de la ejecución " + hilo1Thread.getState()); /** * Detenemos la variable esta corriendo para finalizar el método run e * introducimos una pausa de 5 segundos */ try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out .println("Estado del hilo1 después de finalizar el método run " + hilo1Thread.getState()); Hilo2 hilo2 = new Hilo2(); System.out.println("Estado del hilo2 después de la creación"); hilo2.start(); System.out.println("Estado del hilo2 después de la ejecución"); /** * Detenemos la variable esta corriendo para finalizar el método run e * introducimos una pausa de 5 segundos */ try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out .println("Estado del hilo2 después de finalizar el método run " + hilo1Thread.getState()); /** * Intentamos invocar de nuevo al hilo: aquí sabemos que puede lanzarse * una excepción en tiempo de ejecución, y por lo tanto no debe ser * capturada */ System.out .println("Intentamos ejecutar un hilo que quedó parado de nuevo"); hilo2.start(); } } /** * Los hilos pueden generarse de varias maneras. Una de ellas es implementando * el método runnable * * @author jaime * */ class Hilo1 implements Runnable { /** * Runnable nos obliga a redifinir el método run Este método imprime cada * tres segundos el nombre del hilo mientras la variable estaCorriendo así * lo indique */ public void run() { try { Thread.sleep(500); System.out.println("EJECUTANDO...." + Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * Otra opción es extendiendo de Thread y sobreescribiendo el método run * * @author jaime * */ class Hilo2 extends Thread { public void run() { try { Thread.sleep(500); System.out.println("EJECUTANDO...." + Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
En el ejemplo anterior hemos visto qué existen en Java dos posibilidades de definición de un hilo, bien implementado la interfaz runnable, bien extendiendo de Thread. En ambos casos, es necesario redefinir (en el caso de extender de Thread) o implementar (en el caso de implementar la interfaz Runnable) el método run. Dicho método nos permite realizar una ejecución de un hilo.
Los pasos a seguir para la creación de un hilo son los siguientes: