LA IMPORTANCIA DE LOS HILOS
"Permiten implementar el que un determinado trozo de código Java, pueda ser ejecutado concurrentemente por diferentes contextos de programación; llamados hilos (Threads)".
DIFERENCIA ENTRE PROGRAMACIÓN CONCURRENTE Y PARALELA
• Programación concurrente: Usa un solo procesador. • Programación paralela: Usa varios procesadores.
El trabajo con hilos en Java se basa en la clase Thread (API Java) • Pertenece al paquete java.lang • Hereda de Object • Sintaxis: Public Class Thread extends Object implements Runnable InterFace Runnable
Como construir y usar hilos en programas JAVA Implementando una clase que hereda de la clase Thread, así: • Implemento la clase que hereda de Thread: Public class MisHilos extends Thread { //variables de instancia //constructores //sobreescribo el método run() de Thread Public void run() { //El código Java que se coloca aquí se ejecuta //concurrentemente por los hilos que se crean //y arranquen en los programas que usen esta clase. } //otros métodos } • En los programas que se van a usar clases que heredan de Thread, se instancian los hilos así: ClaseQueHeredaDeThread h1 = New ClaseQueHeredaDeThread(); O si le queremos dar un nombre al hilo: ClaseQueHeredaDeThread h1 = New ClaseQueHeredaDeThread(String NombreDel Hilo); • Los Hilos se arrancan así: h1.start (); h2.start (); Para la clase MisHilos: MisHilos hilo1 = new MisHilos(); MisHilos hilo2= new MisHilos(“hilo 2”); hilo1.start(); hilo2.start();
Implementando una clase que implemente la interface Runnable La interface Runnable solo posee el método Public void run() Tiene que se implementado por cualquier clase cuyas instancias van a ser ejecutadas por hilos. Esta forma de trabajo con hilos opera así: • Creamos una clase que implementa la interface Runnable así: Public class MisHilosRunnable implements Runnable { //variables //constructores //métodos Public void run() { //código a ejecutar concurrentemente por los hilos } } • Creamos clases que heredan de la clase que implementa Runnable así, por ejemplo: Public class usa Runnable extends MisHilosRunnable • En las clases heredadas podemos entonces crear hilos así: Thread h1 = new Thread (new MisHilosRunnable()); O el hilo con nombre así: Thread h2 = new Thread (new MisHilosRunnable(),String nombre)
ALGUNOS MÉTODOS DE LA CLASE THREAD
1) Public Static Thread currentThread (): Retorna una referencia al hilo que en su momento está ejecutando el código compartido. Thread h = Thread.current Thread(); 2) Public final String getName(): Retorna el nombre del Thread que en ese momento está ejecutando el código compartido. • En la clase que hereda de Thread: String nombre= getName(); // Por la relación de Herencia • En la clase que implementa Runnable: String nombre = Thread.current Thread().getName(); 3) Public final void setPriority (int prioridad): Le asigna una prioridad al hilo y puede ser una de las siguientes: Public static final int MAX_PRIORITY Public static final int NORM_PRIORITY Public static final int MIN_PRIORITY Thread h1 = new Thread(…); H1.setPriority (Thread.MAX_PRIORITY); 4) Public static void sleep (long milisegs) ThrowsInterrupted Exception Causa que el hilo que está actuando actualmente sobre el código compartido suspenda su ejecución durante el tiempo especificado. Ejemplo: Try { Thread.sleep (2000) } Catch(InterruptedException e) { //alguna acción } 5) Public void start(): Le informa a la JVM que el hilo está listo para ejecutar el código compartido, pero es la JVM la que decide el momento de iniciar su ejecución invocando el método run() asociado al hilo. Thread h1 = new thread(…); H1. Start(); 6) Public void run(): Se puede usar en lugar del start() , solo cuando los hilos fueron creados mediante instancias de una clase que implemente Runnable. Thread h1 = new thread h1(new ImplementaRunnable(L)); H1.run();
• Clases con métodos compartidos por hilos: Se trabaja creando los hilos así: Thread h1 = new Thread() { Public void run() { // Se invocan los métodos a compartir } }; Thread h2 = new Thread() { //Se invocan los métodos a compartir } } // Se arrancan los hilos // Se implementan los métodos a compartir EJEMPLO: ClaseConMetodoCompartido.java
EJEMPLOS VARIOS: TestMulti.java testPri.java PruebaConHilos1.java threadTester.java
DIAGRAMA DE ESTADOS BÁSICO DEL MECANISMO DE MANEJO DE HILOS
FUENTE: http://200.24.22.78/marioj/HilosEnJava/Hilos.html