PDF de programación - Programación Concurrente en Java - Hebras y monitores

Imágen de pdf Programación Concurrente en Java - Hebras y monitores

Programación Concurrente en Java - Hebras y monitoresgráfica de visualizaciones

Publicado el 27 de Febrero del 2017
777 visualizaciones desde el 27 de Febrero del 2017
398,3 KB
54 paginas
Creado hace 14a (21/03/2006)
Programación Concurrente en Java

Hebras y monitores

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y Programación

Universidad Complutense de Madrid

21 de marzo de 2006

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Programación Concurrente en Java

Threads

Extendiendo la clase java.lang.Thread.

public class P r T h r e a d e x t e n d s Thread {

public P r T h r e a d ( String s ) {

super ( s );

}
public final void run () {

b o o l e a n sigue = true ;
for ( int i =0; i <100 && sigue ; i ++) {

try {

System . out . p r i n t l n ( g e t N a m e ()+ " : " + i );
sleep (20);

} catch ( I n t e r r u p t e d E x c e p t i o n e ) {

System . out . p r i n t l n ( g e t N a m e ()+ " i n t e r r u m p i d a " );
sigue = false ;

}

}

}
public static final void main ( final String [] args ){

Thread p = new P r T h r e a d ( " mia " );
p . start ();

}

}

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Programación Concurrente en Java

Threads

Implementado el interfaz java.lang.Runnable.

public class P r R u n n a b l e i m p l e m e n t s R u n n a b l e {

public final void run () {

Thread hebra = Thread . c u r r e n t T h r e a d ();
b o o l e a n sigue = true ;
for ( int i =0; i <100 && sigue ; i ++) {

try {

System . out . p r i n t l n ( hebra . g e t N a m e ()+ " : " + i );
hebra . sleep (20);

} catch ( I n t e r r u p t e d E x c e p t i o n e ) {

System . out . p r i n t l n ( hebra . g e t N a m e ()+ " i n t e r r u m p i d a " );
sigue = false ;

}

}

}
public static final void main ( final String [] args ) {

Thread p = new Thread ( new P r R u n n a b l e () , " mia " );
p . start ();

}

}

26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

Luis Fernando Llana Díaz

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)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad