Want to create interactive content? It’s easy in Genially!

Get started free

Programación multihilo

fvaldeon

Created on May 14, 2023

Start designing with a free template

Discover more than 1500 professional designs like these:

Piñata Challenge

Teaching Challenge: Transform Your Classroom

Frayer Model

Math Calculations

Interactive QR Code Generator

Interactive Scoreboard

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.