P1. HILOS Y PROCESOS
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
Antaño los programas solían ser secuenciales.
eugeniaperez.es
Línea de control de flujo
El tiempo no influye en el resultado
Presentaba limitaciones
1.1 Hilos y procesos en Java
Los programas concurrentes permiten ejecutar tareas simultáneamente
eugeniaperez.es
Múltiples líneas de control de flujo
Mejora sustancial del rendimiento y velocidad
1.1 Hilos y procesos en Java
¿Posible solución?
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
Tienen características comunes pero...
¿Son lo mismo?
Es un programa ejecutándose de forma independiente y con un espacio propio de memoria.
Flujo secuencial simple dentro de un proceso.
1.1 Hilos y procesos en Java
eugeniaperez.es
Un proceso puede estar formado
por múltiples hilos
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
Planificador de hilos
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
Cuando el planificador quiere dar tiempo de CPU a un proceso distinto al que está en ejecución, se produce un cambio de contexto
Coste computacional elevado
Solución -> hilos
1.1 Hilos y procesos en Java
eugeniaperez.es
Pero... ¿qué comparten y qué no?
THE CODING LOVE
Java -> lenguaje multihilo
Añadimos complejidad...
eugeniaperez.es
Aplicaciones de los hilos
eugeniaperez.es
Ejercicios
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
Text
1.1 Hilos y procesos en Java
eugeniaperez.es
¿daemon ...?
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
usuario: cuatrovientos
password: Cuatrovientos
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
REPASO...
eugeniaperez.es
Cuando se implementa una interfaz, estamos obligados a implementar todos los métodos de la interfaz o hacerlos abstractos.
Repasa el ejemplo que hay subido al aula: Interfaces
UT1. Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.5 - LiftOff
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Hilos y procesos en Java
eugeniaperez.es
REPASO...
eugeniaperez.es
Text
Thread t = new Thread(new LiftOff());
t.start();
Creación de hilos en Java:N
El objeto que recibe Thread debe
implementar Runnable y definir
su tarea en el run().
public class LiftOff implements Runnable {
...
public void run() {
while (countDown-- > 0) {
System.out.println(status());
Thread.yield();
}
}
...
}
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.6 - LiftOffThread
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.7 - MessagePrinter
UT1. Proyecto 1.8 - MessagePrinterSleep
THE CODING LOVE
Uno aprovecha que el otro
se duerme para su ejecución...
Thread.sleep(mseg)
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Proyecto 1.8 - MessagePrinterSleep
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
PSP.UT1.ThreadTest - ThreadTest
1.1 Hilos y procesos en Java
PSP.UT1.ThreadTestRunnable:
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.threadtestrunnable.git
El Thread se crea "desde fuera" y la clase que recibe, SubprocessPrinter tiene que implementar Runnable.
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
PSP.UT1.ThreadTestDecorator
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.threadtestrunnable.git
De esta forma la clase SubprocessPrinter implementa Runnable y, a su vez, contiene un Thread.
Se corresponde con un patrón de diseño llamado Decorator.
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1. Hilos y procesos en Java
eugeniaperez.es
Text
A)
B)
C)
UT1. Hilos y procesos en Java
eugeniaperez.es
UT1. Hilos y procesos en Java
/**
* Name of the thread
*/
private Thread thread;
/**
* Assign a name to the subprocess calling the superclass constructor.
*
* @param name Name of the thread
*/
public SubprocessPrinter(String name) {
// select the sleeping time between 0 and 5 seconds
sleepingTime = (int) (Math.random() * 5000);
thread = new Thread(this, name);
thread.start();
}
UT1. Hilos y procesos en Java
thread = new Thread(this, name);
thread.start();
La clase Thread tiene hasta 8 constructores. Si queremos que se ejecute nuestra tarea (la definida en el hilo) y no el run de la propia clase Thread, debemos construirlo con dicho objeto, que implementa Runnable, y, por tanto, define su tarea en su método run.
1.1 Hilos y procesos en Java
eugeniaperez.es
REPASO
eugeniaperez.es
Ejecución de un hilo
1.1 Hilos y procesos en Java
eugeniaperez.es
Ejecución en paralelo
1.1 Hilos y procesos en Java
eugeniaperez.es
1.1 Hilos y procesos en Java
eugeniaperez.es
UT1 - Proyecto 1.9: PSP.UT1.Race:
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.race.git
UT1 - Proyecto 1.9: PSP.UT1.ConcurrentRace
https://eugenia_perez@bitbucket.org/eugenia_perez/psp.ut1.concurrentrace.git
1.1 Hilos y procesos en Java
eugeniaperez.es
Realiza las actividades de la pág. 47:
1.1 Hilos y procesos en Java
eugeniaperez.es
ENTREGA: 3 Octubre 23:30
Súbela al aula -> Actividad 3, 5