Académique Documents
Professionnel Documents
Culture Documents
Programa multiproceso
En algn punto el programa se divide en varios procesos (threads) que se ejecutan (aparentemente) de manera simultnea Programa multiproceso, multitarea, multihebra (o multithreading)
Para qu?
Programas que tengan que realizar varias tareas de manera simultnea Programas en los que la ejecucin de una parte requiera tiempo y no deba detener el resto del programa
Para qu ? Ejemplo 1
Programa que controla sensores en una fbrica: Los procesos que se encargan de controlar sensores diferentes son independientes y los sensores deben controlarse de manera simultnea
Temperatura Combustible
Programa
Presin
Tiempo
Rafa Caballero - U
Programa
Multitarea en Java
Idea: Definir clases especiales para las tareas que requieran ejecutarse en una hebra de ejecucin (thread) separada Estas clases deben incluir la funcin especial public void run(), equivalente a main() pero para hebras Los objetos de la clase sern inicializados desde otra clase con el mtodo start()
2 Mtodos:
n
Mediante herencia (extensin) de la clase java.lang.Thread Mediante la implementacin del interfaz java.lang.Runnable
Rafa Caballero - U
El programa ir escribiendo dos sucesiones ascendentes de nmeros simultneamente Una hebra por cada contador
Rafa Caballero - U
Ejemplo: contadores
Una ejecucin del programa: Vamos a iniciar las dos hebras Hebras inicializadas HebraA empieza... HebraA dice: 1. HebraB empieza... HebraB dice: 20. HebraA dice: 2. HebraB dice: 21. HebraA dice: 3. HebraB dice: 22. HebraA dice: 4. Programa principal terminado HebraB dice: 23. HebraA dice: 5. HebraB dice: 24. HebraA dice: 6. HebraB dice: 25. HebraA dice: 7. HebraB dice: 26. HebraA dice: 8. HebraB dice: 27. HebraA dice: 9. HebraB dice: 28. HebraA dice: 10. HebraB dice: 29. HebraA acaba. HebraB dice: 30. HebraB acaba.
Ejemplo: contadores
Vamos a iniciar las dos hebras Hebras Inicializadas HebraA empieza HebraA dice:1 HebraA dice:2 HebraA dice:3 HebraA dice:4 HebraA dice:5 HebraA dice:6 HebraA dice:7 HebraA dice:8 HebraA dice:9 HebraA dice:10 HebraA acaba Programa Principal Terminado Hebra B empieza HebraB dice: 20 HebraB dice: 21 HebraB dice: 22 HebraB dice: 23 HebraB dice: 24 HebraB dice: 25 HebraB dice: 26 HebraB dice: 27 HebraB dice: 28 HebraB dice: 29 HebraB acaba
Rafa Caballero - U
Rafa Caballero - U
rbitro
Nmero: 5 2 7
Jugador
Rafa Caballero - U
3 Clases:
Principal: Inicializa el rbitro y lanza las hebras de los jugadores n rbitro: Contiene el nmero a adivinar, el turno y muestra el resultado n Jugador: Extiende Thread e incluye al rbitro.
n
Rafa Caballero - U
Rafa Caballero - U
Rafa Caballero - U
Rafa Caballero - U
Aunque cada hebra tenga su variable rbitro todas son referencias al mismo objeto Con synchronized se protegen aquellas funciones que no se quiera que se puedan interrumpir por otra hebra
Llega un nuevo cargamento y ya no cabe en el almacn La fbrica necesita piezas pero no hay suficientes piezas en el almacn
Rafa Caballero - U
Retirada: Simula retirada de piezas hacia la fbrica. Adems escribe el nmero de das transcurridos desde el comienzo Envo: Simula el envo de piezas al almacn Almacn: Simula el almacn. Tendr funciones para atender las llegadas y las salidas de piezas. Controlar si hay algn error y mostrar mensajes con el movimiento del almacn Principal: Funcin main que pondr en marcha la aplicacin
n n
Rafa Caballero - U
Rafa Caballero - U
En el caso de Retirada: try{ sleep(2400); // simulacin de un da } catch (InterruptedException e) { e.printStackTrace(); } En el caso de Envio: try{ sleep(800); // simulacin de 8 horas } catch (InterruptedException e) { e.printStackTrace(); }
Rafa Caballero - U
Rafa Caballero - U
Da 2 Pedido de 2420 piezas Da 42 Hay 5349 piezas en el almacn Pedido de 2483 piezas
Rafa Caballero - U
Sugerencia: probar con otros valores Por ejemplo, con 4 envos por da se comprobar que el almacn se llena en aproximadamente 25 das