La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Objetos con linea de ejecucion propia

Presentaciones similares


Presentación del tema: "Objetos con linea de ejecucion propia"— Transcripción de la presentación:

1 Objetos con linea de ejecucion propia
Hasta ahora hemos visto que los objetos generalmente se activan externamente con una llamada a uno de sus metodos Cuando un metodo de un objeto es llamado, el metodo que lo llamo detiene su ejecucion hasta que el metodo del objeto termina, luego sigue Es posible en java programar metodos para objetos que se ejecuten en paralelo al metodo que lo activo Para eso se requiere de un objeto de la clase Thread

2 Lineas de ejecucion en paralelo
Main Thread1 Thread2 Thread3

3 Implementacion de Threads
La manera mas clara de implementar threads es extendiendo la clase Threas y sobreescribiendo el metodo run() Thread es una clase existente (no hay necesidad de importarla) Tiene un metodo run() (originalmente sin instrucciones) cuyas instrucciones que se ejecutan en paralelo cuando se activa. Para Activar el thread y ejecutar las instrucciones en paralelo de run() hay que llamar al metodo start() de la clase thread La definicion de la clase nueva se veria mas o menos asi public class MyThread extends Thread { And somewhere should appear: public void run() { //instructions to be executed in parallel } Y esto se usa… MyThread mt = new MyThread(); Mt.start() NOTAS

4 Ejemplo public class SimpleThread extends Thread { String nombre; public SimpleThread(String str) { nombre = str; } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i+" "+nombre); try { this.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} System.out.println("DONE! " + getName()); La instruccion this.sleep(miliseconds) debe aparecer en un bloque try-catch NOTAS

5 Uso de esta clase public class TwoThreadsTest { public static void main (String[] args) { SimpleThread t1,t2; t1 = SimpleThread("Jamaica"); t2 = SimpleThread("Fiji"); t1.start(); t2.start() } start() gatilla la ejecicion del metodo run. Hay otros metodos que se le pueden aplicar al thread como join(), que suspende la ejecucion del progrsama llamador del thread hasta que el thread termine. suspend(), resume(), stop() estan dados de baja por lo peligroso de su uso Ver ActiveClock y compararlo con ActiveClock2 NOTAS

6 Threads usando la interfaz Runnable
Hay veces en que no se puede o no conviene extender el objeto thread (por ejemplo, si hay que extender un objeto grafico o si estamos en un applet) Para eso se puede implementar la interfaz Runnable. Al implementar la interfaz Runnable, una clase debe programar un metodo llamado run(). Con esto, la clase ademas de ser de la clase que extendio es de la clase Runnable. public class UnRunnable extends UnaClase implements Runnable public void run() { … } Para iniciar la ejecucion paralela de este metodo se debe crear un objeto de la clase Thread y pasarle como parametro al constructor un objeto de la clase Runnable. UnRunnable r = new UnRunnable() ; Thread t = new Thread(r); Al aplicar el metdo start al thread creado de esta manera se ejecutara el run() de el objeto runnable en paralelo t.start() NOTAS

7 Ejemplos de uso de Runnable
El Ejemplo NoSincron muestra el uso de esta tecnica, ademas de problemas de concurrencia que se pueden dar en el uso de Threads Java provee al menos 2 maneras de declarar regiones criticas (regiones donde solo un thread puede ejecutar a la vez Declarar todo el metodo como region critica (ver Sincron1) Usar el semaforo de un objeto (ver Sincron2) NOTAS

8 Ejemplo de uso de Join El metodo join() aplicado a un objeto de tipo Thread hace que el metodo llamador se detenga hasta que el thread termine Generalmente se usa cuando es necesario esperar que varios threads terminen de procesar para poder sacar algun resultado de eso Ejemplo1: En el caso de TwoThreads, esperar a que terminen ambos threads para anunciar el ganador (ver TwoThreads3.java) Ejemplo2: contar en cuantas lineas de 3 archivos diferentes se encuantra la palabra java. Se pueden echar a correr 3 threds para buscar en cada archivo y luego se espera a que terminen para sumar los resultados (ver BuscaThread.java) NOTAS


Descargar ppt "Objetos con linea de ejecucion propia"

Presentaciones similares


Anuncios Google