unidad 4 - colecciones e hilos.pdf
TRANSCRIPT
![Page 2: UNIDAD 4 - Colecciones e hilos.pdf](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/3.jpg)
Objetivos
• Reconocer los tipos de colecciones que existen.
• Utilizar las colecciones para agrupar objetos.
• Escribir hilos.
![Page 4: UNIDAD 4 - Colecciones e hilos.pdf](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/4.jpg)
Índice
• Colecciones
• Hilos
![Page 5: UNIDAD 4 - Colecciones e hilos.pdf](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/5.jpg)
TEMA 1: COLECCIONES
![Page 6: UNIDAD 4 - Colecciones e hilos.pdf](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/9.jpg)
TEMA 2: HILOS
![Page 10: UNIDAD 4 - Colecciones e hilos.pdf](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/12.jpg)
Í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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/13.jpg)
Í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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/28.jpg)
Estados de un hilo
28
![Page 29: UNIDAD 4 - Colecciones e hilos.pdf](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051610/5490dd2ab47959f2248b53a4/html5/thumbnails/34.jpg)
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