unidad 4 - colecciones e hilos.pdf

34
Copyright © 2011 por TECSUP Unidad 4: Colecciones e Hilos David Rodríguez [email protected]

Upload: fisianthony

Post on 13-Dec-2014

20 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: UNIDAD 4 - Colecciones e hilos.pdf

Copyright © 2011 por TECSUP

Unidad 4: Colecciones e Hilos

David Rodrí[email protected]

Page 2: UNIDAD 4 - Colecciones e hilos.pdf

Introducción

• En la presente unidad, se detalla la importancia de las interfaces, su creación y uso.

• Además, 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.

Page 3: UNIDAD 4 - Colecciones e hilos.pdf

Objetivos

• Reconocer los tipos de colecciones que existen.

• Utilizar las colecciones para agrupar objetos.

• Escribir hilos.

Page 4: UNIDAD 4 - Colecciones e hilos.pdf

Índice

• Colecciones

• Hilos

Page 5: UNIDAD 4 - Colecciones e hilos.pdf

TEMA 1: COLECCIONES

Page 6: UNIDAD 4 - Colecciones e hilos.pdf

Collection

• Un Collection, llamado también contenedor, es simplemente un objeto que agrupa múltiples elementos en una sola unidad.

• Los Collections son usados para almacenar, recuperar, manipular y trasladar datos.

Page 7: UNIDAD 4 - Colecciones e hilos.pdf

Map

• Como se puede apreciar en la figura tenemos dos raíces en la jerarquía : Collection y Map.

• Esto es debido a que existe una ligera diferencia de funcionamiento entre ambas, básicamente y sin entrar en detalles podríamos decir que una Collection trabaja sobre conjuntos de elementos singulares mientras que un Map trabaja sobre pares de valores, por lo tanto existen pequeñas diferencias entre los métodos necesarios por unas y otras.

Page 8: UNIDAD 4 - Colecciones e hilos.pdf

Collection

• Collection. Es la interfase padre.

• Set. Es una colección que no permite elementos duplicados.

• List. Es una colección ordenada (secuencia). Un List puede contener elementos duplicados.

• Queue. Es una colección que trabajo en FIFO.

• Map. Una Colección que tiene keys.

• SortedSet. Es un Set que mantiene sus elementos en orden ascendente.

Page 9: UNIDAD 4 - Colecciones e hilos.pdf

TEMA 2: HILOS

Page 10: UNIDAD 4 - Colecciones e hilos.pdf

Introducción

• Todos los programadores están familiarizados con la escritura de programas secuenciales.

• En cambio, los hilos ofrecen la posibilidad de que un solo programa ejecute varias tareas simultáneamente.

10

Page 11: UNIDAD 4 - Colecciones e hilos.pdf

Objetivos:

• Entender el uso de los hilos.

• Conocer las 2 estrategias de creación de hilos.

• Reconocer el código de ejecución de un hilo.

• Conocer los estados de un hilo.

• Entender el cambio de estados de un hilo.

11

Page 12: UNIDAD 4 - Colecciones e hilos.pdf

Índice

• Aplicaciones con un solo hilo de ejecución

• Aplicaciones con hilos (Threads)

• Implementación de hilos ( Threads )

• Organizador de hilos

• La Clase Thread – Ejemplo de un hilo – Por Herencia

– Ejecución de un hilo

• Interfase Runnable– Ejemplo de un hilo – Por Implementación

• Comparación de las estrategias de creación de hilos

12

Page 13: UNIDAD 4 - Colecciones e hilos.pdf

Índice

• Un programa multi-hilos ( MultiThreads )

• Estados de un hilo

• Prioridad en los hilos

• Controlando los hilos

• Hilo en estado de bloqueo

13

Page 14: UNIDAD 4 - Colecciones e hilos.pdf

Aplicaciones con un solo hilo de ejecución

• Los ejemplos vistos hasta el momento han sido desarrollados utilizando un solo hilo de ejecución.

• Una rutina simple define el flujo de la aplicación – El método main

• El tiempo de vida de la aplicación está definido por el método main.

14

Page 15: UNIDAD 4 - Colecciones e hilos.pdf

Aplicaciones con hilos (Threads)

• Java nos permite crear más de un hilo de ejecución.

• Otros hilos pueden ser ejecutados de manera independiente.

• Cada hilo define su propio tiempo de vida.• Cuando un hilo termina, se destruye.

15

Page 16: UNIDAD 4 - Colecciones e hilos.pdf

Implementación 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

Page 17: UNIDAD 4 - Colecciones e hilos.pdf

Organizador de hilos

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

17

Page 18: UNIDAD 4 - Colecciones e hilos.pdf

La Clase Thread

• Cada hilo de ejecución es representado por un objeto de tipo Thread.

• Ejemplo:Thread myThread = Thread.currentThread();

18

Page 19: UNIDAD 4 - Colecciones e hilos.pdf

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

Page 20: UNIDAD 4 - Colecciones e hilos.pdf

Ejecución de un hilo

• Para ejecutar un hilo se llama a su método start(). Este método registra al hilo en el Organizador de hilos.

• La llamada al método start() no ejecuta al hilo inmediatamente, sólo lo hace elegible para ser ejecutado cuando el Organizador de hilos lo vea conveniente.

• Pero lo que realmente ejecuta el hilo es el código que se encuentra en el método run(). Si se llama directamente al método run() del hilo, entonces no se estará aprovechando la simultaneidad que ofrecen los hilos.

20

Page 21: UNIDAD 4 - Colecciones e hilos.pdf

Ejecución de un hilo

• Cuando el método 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 continúa existiendo pero como si fuese cualquier objeto. Se puede acceder a sus datos y métodos.

21

Page 22: UNIDAD 4 - Colecciones e hilos.pdf

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

Page 23: UNIDAD 4 - Colecciones e hilos.pdf

Ejemplo de un hilo – Por Implementación

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

Page 24: UNIDAD 4 - Colecciones e hilos.pdf

Comparación de las estrategias de creación de hilos

24

Por Herencia Por Implementacion

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

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

Page 25: UNIDAD 4 - Colecciones e hilos.pdf

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

Page 26: UNIDAD 4 - Colecciones e hilos.pdf

Estados de un hilo

• Cuando se llama al método start() el hilo no se ejecuta inmediatamente.

• El Organizador de hilos mueve al hilo al estado EN EJECUCIÓN. Es aquí cuando se ejecuta el método run().

• Un hilo que está EN EJECUCIÓN puede pasar a otros estados, como se ve a continuación.

26

Page 27: UNIDAD 4 - Colecciones e hilos.pdf

Estados de un hilo

• EN EJECUCIÓN (running)

• Existen varios estados de inactividad:– EN REPOSO (sleeping)– BLOQUEADO (blocked)

• LISTO PARA EJECUTAR (ready)

• MUERTO (dead)

27

Page 28: UNIDAD 4 - Colecciones e hilos.pdf

Estados de un hilo

28

Page 29: UNIDAD 4 - Colecciones e hilos.pdf

Prioridad en los hilos

• Cada hilo tiene una prioridad, la cual está definida por un número 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 sólo uno.

• La prioridad por defecto es 5.

29

Page 30: UNIDAD 4 - Colecciones e hilos.pdf

Prioridad en los hilos

• Para modificar la prioridad de un hilo se tiene el método setPriority().

• Para conocer la prioridad actual del hilo se tiene el método getPriority().

int priorityOld = myThread.getPriority();

int priorityNew = Math.min(priorityOld +1, Thread.MAX_PRIORITY);

myThread.setPriority(priorityNew );

30

Page 31: UNIDAD 4 - Colecciones e hilos.pdf

Controlando los hilos

• El control de los hilos es el arte de moverlos de un estado a otro.

• Los siguientes métodos nos ayudan al control:– yield();– sleep();

• También existe un estado de bloqueo.

31

Page 32: UNIDAD 4 - Colecciones e hilos.pdf

yield()

• Una llamada al método yield() causa que el hilo actual que está en ejecución 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

Page 33: UNIDAD 4 - Colecciones e hilos.pdf

sleep()

• Un hilo que es mandado a dormir pasa el tiempo sin hacer nada y sin usar el CPU. El método sleep() tiene 2 implementaciones:– sleep(long milisegundos)

– sleep(long milisegundos, int nanosegundos)

• Del gráfico se ve que un hilo cuando deja de dormir no continúa su ejecución inmediatamente. Depende del Organizador de hilos.

33

Page 34: UNIDAD 4 - Colecciones e hilos.pdf

Hilo en estado de bloqueo

• Los métodos que ejecutan operaciones de entrada y salida tienen que esperar a factores externos para que puedan proceder. Por ejemplo, la conexión 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