Está en la página 1de 34

Unidad 4: Colecciones e Hilos

David Rodrguez drodriguez@tecsup.edu.pe Copyright 2011 por TECSUP

Introduccin
En la presente unidad, se detalla la importancia de las interfaces, su creacin y uso. Adems, se detalla el manejo de errores en Java utilizando los bloques try, catch y finally. Finalmente, se revisan las colecciones existentes para albergar objetos en Java.

Objetivos
Reconocer los tipos de colecciones que existen. Utilizar las colecciones para agrupar objetos. Escribir hilos.

ndice
Colecciones Hilos

TEMA 1: COLECCIONES

Collection
Un Collection, llamado tambin contenedor, es simplemente un objeto que agrupa mltiples elementos en una sola unidad. Los Collections son usados para almacenar, recuperar, manipular y trasladar datos.

Map
Como se puede apreciar en la figura tenemos dos races en la jerarqua : Collection y Map. Esto es debido a que existe una ligera diferencia de funcionamiento entre ambas, bsicamente y sin entrar en detalles podramos decir que una Collection trabaja sobre conjuntos de elementos singulares mientras que un Map trabaja sobre pares de valores, por lo tanto existen pequeas diferencias entre los mtodos necesarios por unas y otras.

Collection
Collection. Es la interfase padre. Set. Es una coleccin que no permite elementos duplicados. List. Es una coleccin ordenada (secuencia). Un List puede contener elementos duplicados. Queue. Es una coleccin que trabajo en FIFO. Map. Una Coleccin que tiene keys. SortedSet. Es un Set que mantiene sus elementos en orden ascendente.

TEMA 2: HILOS

Introduccin
Todos los programadores estn familiarizados con la escritura de programas secuenciales. En cambio, los hilos ofrecen la posibilidad de que un solo programa ejecute varias tareas simultneamente.

10

Objetivos:
Entender el uso de los hilos. Conocer las 2 estrategias de creacin de hilos. Reconocer el cdigo de ejecucin de un hilo. Conocer los estados de un hilo. Entender el cambio de estados de un hilo.
11

ndice
Aplicaciones con un solo hilo de ejecucin Aplicaciones con hilos (Threads) Implementacin de hilos ( Threads ) Organizador de hilos La Clase Thread
Ejemplo de un hilo Por Herencia Ejecucin de un hilo

Interfase Runnable
Ejemplo de un hilo Por Implementacin

Comparacin de las estrategias de creacin de hilos

12

ndice
Un programa multi-hilos ( MultiThreads ) Estados de un hilo Prioridad en los hilos Controlando los hilos Hilo en estado de bloqueo

13

Aplicaciones con un solo hilo de ejecucin


Los ejemplos vistos hasta el momento han sido desarrollados utilizando un solo hilo de ejecucin. Una rutina simple define el flujo de la aplicacin
El mtodo main

El tiempo de vida de la aplicacin est definido por el mtodo main.


14

Aplicaciones con hilos (Threads)


Java nos permite crear ms de un hilo de ejecucin. Otros hilos pueden ser ejecutados de manera independiente. Cada hilo define su propio tiempo de vida. Cuando un hilo termina, se destruye.

15

Implementacin de hilos (Threads )


El soporte de hilos es proporcionado por :
java.lang.Thread ( Class ) java.lang.Runable ( Interface )

Los hilos dependen del JVM y del sistema operativo.

16

Organizador de hilos
Existe un Organizador de hilos (Thread scheduler), el cual es parte del JVM o del propio sistema operativo, y su funcin es decidir qu hilo ejecutar en un momento dado.

17

La Clase Thread
Cada hilo de ejecucin es representado por un objeto de tipo Thread. Ejemplo:
Thread myThread = Thread.currentThread();

18

Ejemplo de un hilo Por Herencia


public class HiloHerencia extends Thread { public void run() { for (int i = 0; i < 5; i++) { System.out.println(i); } } } public class Test_HiloHerencia { public static void main(String[] args) { HiloHerencia h = new HiloHerencia(); h.start(); } }

19

Ejecucin de un hilo
Para ejecutar un hilo se llama a su mtodo start(). Este mtodo registra al hilo en el Organizador de hilos. La llamada al mtodo start() no ejecuta al hilo inmediatamente, slo lo hace elegible para ser ejecutado cuando el Organizador de hilos lo vea conveniente. Pero lo que realmente ejecuta el hilo es el cdigo que se encuentra en el mtodo run(). Si se llama directamente al mtodo run() del hilo, entonces no se estar aprovechando la simultaneidad que ofrecen los hilos.
20

Ejecucin de un hilo
Cuando el mtodo run() termina de ejecutarse, el hilo ha terminado de ejecutarse y se le considera muerto. Una vez que el hilo est muerto no hay forma de re-activarlo. El hilo muerto contina existiendo pero como si fuese cualquier objeto. Se puede acceder a sus datos y mtodos.
21

Interfase Runnable
La Clase Thread tiene otro constructor del tipo:
public Thread (Runnable myThread)

Se puede pasar al constructor del Thread cualquier objeto que implemente la interfase Runnable.

22

Ejemplo de un hilo Por Implementacin


public class HiloInterfase implements Runnable { public void run() { for (int i = 0; i < 5; i++) { System.out.println(i); } } } public class Test_HiloInterfase { public static void main(String[] args) { HiloInterfase h = new HiloInterfase(); Thread t = new Thread(h); t.start(); } }

23

Comparacin de las estrategias de creacin de hilos

Por Herencia
Es

Por Implementacion
Es

simple de usar. Ya no es posible usar la herencia. No cumple estrictamente la POO (No cumple ES UN).

un poco complicado de implementar. Permite heredar de otra Clase que no es Thread. Cumple la POO (Esta asociado a).

24

Un programa multi-hilos ( MultiThreads)


public class Programa_multitarea { public static void main(String[] args){ //

OneThread one = new OneThread(); one.start(); TwoThread two = new TwoThread(); two.start(); ThreeThread three = new ThreeThread(); three.start();
} } 25

Estados de un hilo
Cuando se llama al mtodo start() el hilo no se ejecuta inmediatamente. El Organizador de hilos mueve al hilo al estado EN EJECUCIN. Es aqu cuando se ejecuta el mtodo run(). Un hilo que est EN EJECUCIN puede pasar a otros estados, como se ve a continuacin.
26

Estados de un hilo
EN EJECUCIN (running) Existen varios estados de inactividad:
EN REPOSO (sleeping) BLOQUEADO (blocked)

LISTO PARA EJECUTAR (ready) MUERTO (dead)

27

Estados de un hilo

28

Prioridad en los hilos


Cada hilo tiene una prioridad, la cual est definida por un nmero entero de 1 a 10. Esta prioridad es considerada por el Organizador de hilos para decidir que hilo ejecutar. El organizador elige el hilo con mayor prioridad. Si existen varios hilos en espera, el Organizador elige slo uno. La prioridad por defecto es 5.
29

Prioridad en los hilos


Para modificar la prioridad de un hilo se tiene el mtodo setPriority(). Para conocer la prioridad actual del hilo se tiene el mtodo getPriority().
int priorityOld = myThread.getPriority(); int priorityNew = Math.min(priorityOld +1, Thread.MAX_PRIORITY); myThread.setPriority(priorityNew );

30

Controlando los hilos


El control de los hilos es el arte de moverlos de un estado a otro. Los siguientes mtodos nos ayudan al control:
yield(); sleep();

Tambin existe un estado de bloqueo.


31

yield()
Una llamada al mtodo yield() causa que el hilo actual que est en ejecucin se mueva al estado READY. Entonces el Organizador de hilos mover otro hilo al estado RUNNING. Con esto se permite ejecutar un hilo en reemplazo de otro.

32

sleep()
Un hilo que es mandado a dormir pasa el tiempo sin hacer nada y sin usar el CPU. El mtodo sleep() tiene 2 implementaciones:
sleep(long milisegundos) sleep(long milisegundos, int nanosegundos)

Del grfico se ve que un hilo cuando deja de dormir no contina su ejecucin inmediatamente. Depende del Organizador de hilos.
33

Hilo en estado de bloqueo


Los mtodos que ejecutan operaciones de entrada y salida tienen que esperar a factores externos para que puedan proceder. Por ejemplo, la conexin a un servidor:
try { Socket sock = new Socket(192.168.1.2, 5505); InputStream istr = sock.getInputStream(); int b = istr.read(); }

El bloqueo se da cuando el hilo tiene que esperar una indeterminada cantidad de tiempo.
34

También podría gustarte