Want to create interactive content? It’s easy in Genially!
Programación multihilo
fvaldeon
Created on May 14, 2023
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Piñata Challenge
View
Teaching Challenge: Transform Your Classroom
View
Frayer Model
View
Math Calculations
View
Interactive QR Code Generator
View
Interactive Scoreboard
View
Interactive Bingo
Transcript
UD2: Programación Multihilo
Empezar
Fernando Valdeón Casanova
Semana 1: Implementación de hilos
Clase Thread
Interface Runnable
Clase anónima
Siempre que hemos creado un programa hemos usado un hilo de ejecución, el cual se conoce como hilo "main". Para comprobar el hilo en el que se ejecuta nuestro código:System.out.println(Thread.currentThread().getName())Ejercicios Semanales: Ejercicio 1, 2 y 3.
- Practicamos las diferentes formas de crear hilos mediante la creación de 3 programas que ejecutan un hilo secundario, comprobando el inicio y el fin del hilo secundario y del hilo main.
Volver
Semana 2: Sincronización
Ejercicios semanales
- Ejercicio 4: sleep() y join()
- Ejercicio 5: sleep(), join() e isAlive()
- Ejercicio 6: Parar hilos
Una vez que conoces cómo crear hilos, vamos a ver cómo controlar su ejecución.
- Pausar la ejecución de un hilo durante una cantidad de tiempo.
- Hacer que un hilo espere a que termine otro hilo para continuar.
- Hacer que un hilo se ejecute mientras otro hilo esté en ejecución.
- Terminar la ejecución de un hilo en cualquier momento.
- ¿cómo plantearías una forma de pausar un hilo y volverlo a reanudar mediante una variable de control?
Método sleep( )
Método join( )
Método isAlive( )
Variables de control
join( ) II
join( ) I
isAlive( )
Parar hilo
Volver
Ejercicios semanales
- Ejercicio 7: Iniciar hilo mediante botón
- Ejercicio 8: Iniciar y parar hilo mediante botones
Semana 3: Hilos en GUI
Controlar hilos mediante bo tones
A partir de este momento vamos a plantear los mecanismos que conocemos sobre gestión de hilos en aplicaciónes sencillas con Interfaz Gráfica. De este modo prodremos parar o arrancar los hilos mediante botones, y mostrar sus operaciones en pantalla. Crear una Ventana en IntelliJ es muy sencillo, podemos verlo en el Anexo de los apuntes:
GUI con IntelliJ
Volver
Semana 4: Hilos en GUI
Hilo Despachador de Eventos (EDT)
Ahora que sabemos cómo crear hilos y cómo pararlos o sincronizarlos, vamos a aplicar estos mecanismos en pequeñas aplicaciones que tengan una Interfa gráfica. La ejecución de la aplicaciones con GUI no es dirigida por el hilo "main", sino por un hilo especial llamado "Hilo Despachador de Eventos" (Event Dispatch Thread) o Hilo EDT. Para comprender cual es el propósito de este hilo debemos realizar una lectura del siguiendo apartado de la wiki de apuntes: Para poder enviar operaciones de modo que se realicen en el hilo EDT el primer mecanismo será el método: SwingUtilities.invokeLater()
Pulsar para ir a Wiki de Apuntes
Ejercicios semanales
- Ejercicio 9: Iniciar y parar hilo worker
- Ejercicio 10: Controlar hilo desde GUI
Volver
Ejercicios semanales
- Ejercicio 11: Tareas E/S BBDD
- Ejercicio 12: Barra Progreso
- Ejercicio 13: SwingWorker
Semana 5: Clase SwingWorker
Pulsar para ir a Wiki de Apuntes
La clase SwingWorker permite crear un hilo "Worker" y al mismo tiempo nos permité trabajar con el hilo EDT de forma directa.
Práctica 1..1
- Enunciado Práctica 1.1
- Ejecutable de Ejemplo
Volver
Recursos para la práctica
Semana 6: Práctica
Debemos crear una aplicación que nos permite descargar simultáneamente diferentes ficheros a través de enlaces directos. Podemos tomar como referencia la aplicación JDownloader:
Ponemos en práctica lo aprendido en esta unidad centrándonos en el desarrollo de una aplicación de descargas multihilo. Los ejercicios de esta semana se centran en operaciones de E/S (ficheros) mediante hilos worker.
Ejercicios semanales
- Ejercicio 14: E/S mediante hilos worker
- Ejercicio 15: Parar y pausar hilos worker
- Clase SwingWorker y PropertyChangeListener
- GUI Dinámica I y II
Canal de tutorías de Twitch
Volver
Contenidos de ampliación: Log en segundo plano con librería Apache Log4J
Semana 7: Final de unidad
En esta última semana se empleará para trabajar en clase y plantear y resolver dudas sobre la práctica y el examen de final de unidad. Además, al igual que la semana anterior se realizará la segunda tutoría online de resolución de dudas.
Canal de tutorías de Twitch
Volver
Valoración del proceso de Enseñanza-Aprendizaje Unidad 2
Una vez terminada la unidad, es de gran ayuda responder al siguiente formulario de cara a tener una visión objetiva sobre el desarrollo de la unidad:
Formulario
Volver
La clase PropertyChangeListener nos permite añadir un listener a un hilo SwingWorker de modo que el listener será notificado cada vez que el hilo Worker cambie su estado.
Cómo crear una aplicación con ventanas en IntelliJ, utilizando el patrón Modelo-Vista-Controlador.
Se conoce como Interfa gráfica dinámica a aquellas GUI que son capaces de crear añadir componentes GUI de forma dinámica en tiempo de ejecución. Puede resultar interesante aplicarlo a nuestra aplicación.
El método join() nos permite organizar de forma secuencial la ejecución de hilos, de modo que uno no continúe hasta que otro no haya terminado.
Nos permite crear y definir el comportamiento de un hilo de forma fácil.Utiliza la interface Runnable del ejemplo anterior, creando una instancia mediante una "clase anónima.
Esl método isAlive() nos permite comprobar si un hilo sigue en ejecución, y mantener a un segundo hilo realizando una tarea durante toda la ejecución del primero.
Es la forma más sencilla de separar el código de nuestros hilos en diferentes clases. Nos facilitará la organización y comprensión de nuestro programa.
Podemos ver cómo dos hilos se sincronizan entre sí, sin necesidad del hilo main, es decir, cuando el método main ha terminado, los dos hilos siguen en ejecución.
Ampliación GUI Dinámica, eliminar componentes y relacionarlos.
En este ejemplo vemos cómo mediante una variable de control booleana, podemos plantear una condición de salida de un bucle, y modificar dicha variable a través de un método.
Es similar a la forma anterior, pero implementando una interface en una nueva clase.Permite reutilizar la misma implementación en diferentes hilos.