Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Ciclo de vida de una hebra
Tras crear una hebra y se ejecuta el método start, la hebra puede
estár:
1 En ejecución.
2 Suspendida: ha ejecutado sleep, join, wait.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Parar una hebra
Usar el método interrupt
public static void ex1 () throws I n t e r r u p t e d E x c e p t i o n {
Thread h = new P r T h r e a d ( " 1 " );
h . start ();
Thread . sleep (100);
h . i n t e r r u p t ();
System . out . p r i n t l n ( h . i s I n t e r r u p t e d ());
}
1
2
3
4
5
6
7
Métodos Deprecated: stop, suspend, resume.
Una hebra para cunado está Not Runnnable, ha ejecutado sleep,
join, wait.
Pueden lanzar InterruptedException, la hebra decide si para o
sigue.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
Método: join
public static void ex2 () throws I n t e r r u p t e d E x c e p t i o n {
Thread h1 = new P r T h r e a d ( " 1 " );
Thread h2 = new P r T h r e a d ( " 2 " );
Thread h3 = new P r T h r e a d ( " 3 " );
h1 . start ();
h2 . start ();
h3 . start ();
h1 . join ();
h2 . join ();
h3 . join ();
}
1
2
3
4
5
6
7
8
9
10
11
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
Método: join
h1.start()
h2.start()
h3.start()
h1.join()
h2.join()
h3.join()
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
1 h1.start(): h1 se ejecuta.
Método: join
h1.start()
h2.start()
h3.start()
h1.join()
h2.join()
h3.join()
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
Método: join
h1.start()
h2.start()
h3.start()
1 h1.start(): h1 se ejecuta.
2 h2.start(): h2 se ejecuta.
h1.join()
h2.join()
h3.join()
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
Método: join
h1.start()
h2.start()
h3.start()
h1.join()
h2.join()
h3.join()
1 h1.start(): h1 se ejecuta.
2 h2.start(): h2 se ejecuta.
3 h3.start(): h3 se ejecuta.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
Método: join
h1.start()
h2.start()
h3.start()
1 h1.start(): h1 se ejecuta.
2 h2.start(): h2 se ejecuta.
3 h3.start(): h3 se ejecuta.
4 h1.join(): esperamos a que h1
h1.join()
pare.
h2.join()
h3.join()
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
Método: join
h1.start()
h2.start()
h3.start()
1 h1.start(): h1 se ejecuta.
2 h2.start(): h2 se ejecuta.
3 h3.start(): h3 se ejecuta.
4 h1.join(): esperamos a que h1
h1.join()
pare.
5 h2.join(): esperamos a que h2
pare.
h2.join()
h3.join()
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Esperamos a que una hebra acabe
Método: join
h1.start()
h2.start()
h3.start()
1 h1.start(): h1 se ejecuta.
2 h2.start(): h2 se ejecuta.
3 h3.start(): h3 se ejecuta.
4 h1.join(): esperamos a que h1
h1.join()
pare.
5 h2.join(): esperamos a que h2
pare.
h2.join()
h3.join()
6 h3.join(): esperamos a que h3
pare (no hace falta).
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Cerrojos de objetos
Cada objeto en Java tiene un cerrojo
s y n c h r o n i z e d ( obj ) {
*/
/*
}
El cerrojo puede abarcar a todo un método
type method (...) {
s y n c h r o n i z e d ( this ) {
/*
*/
}
s y n c h r o n i z e d type method (...) {
/*
*/
}
1
2
3
1
2
3
4
1
2
3
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized?
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized? sólo se
puede ejecutar un método a la vez
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized? sólo se
puede ejecutar un método a la vez
¿Qué falta para tener un monitor?
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized? sólo se
puede ejecutar un método a la vez
¿Qué falta para tener un monitor? las variables condición.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized? sólo se
puede ejecutar un método a la vez
¿Qué falta para tener un monitor? las variables condición.
Todos los objetos tienen los métodos wait(), notify() y
notifyAll().
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized? sólo se
puede ejecutar un método a la vez
¿Qué falta para tener un monitor? las variables condición.
Todos los objetos tienen los métodos wait(), notify() y
notifyAll().
Un objeto con todos los métodos synchronized es un
monitor con una sola variable condición.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized? sólo se
puede ejecutar un método a la vez
¿Qué falta para tener un monitor? las variables condición.
Todos los objetos tienen los métodos wait(), notify() y
notifyAll().
Un objeto con todos los métodos synchronized es un
monitor con una sola variable condición.
¿Qué hacemos si hay varias variables condición?
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Variables condición
¿Qué ocurre si todos los métodos son synchronized? sólo se
puede ejecutar un método a la vez
¿Qué falta para tener un monitor? las variables condición.
Todos los objetos tienen los métodos wait(), notify() y
notifyAll().
Un objeto con todos los métodos synchronized es un
monitor con una sola variable condición.
¿Qué hacemos si hay varias variables condición? Todo monitor
se puede hacer con una única variable condición, con pérdida
de eficiencia: método notifyAll().
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
Programación Concurrente en Java
Monitor puente
Tiene dos variables condición: norte y sur.
p r o c e d u r e p e r m i s o ( s e n t i d o s ) {
if ( s .
Links de descarga
http://lwp-l.com/pdf2474
Comentarios de: Programación Concurrente en Java - Hebras y monitores (0)
Comentarios de: Programación Concurrente en Java - Hebras y monitores (0)
No hay comentarios