PDF de programación - Programación Concurrente en Java: Threads

Imágen de pdf Programación Concurrente en Java: Threads

Programación Concurrente en Java: Threadsgráfica de visualizaciones

Publicado el 26 de Febrero del 2017
1.227 visualizaciones desde el 26 de Febrero del 2017
307,6 KB
35 paginas
Creado hace 16a (07/05/2007)
Programación Concurrente en Java: Threads

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y Computación

Universidad Complutense de Madrid

7 de mayo de 2007

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

Ejemplos de programación concurrente

En un sistema operativo, diversos programas compiten por los
recursos del sistema: memoria, dispositivos.

Bases de datos.

Aplicaciones Web.

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

Hebras, hilos

En un programa concurrente puede haber varios hilos de
computación.

h1.start()

h2.start()

h3.start()

h1.join()

h2.join()

h3.join()

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

Sincronización de Objetos

Puede haber varias hebras ejecutando simultáneamente
métodos de objetos

Es necesario sincronizar los accesos al objeto.

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

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 ();

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

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 ();

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

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 debería parar.

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

Esperamos a que una hebra acabe

Método: join

h1.start()

h2.start()

h3.start()

1 h1.start(): h1 se ejecuta.

h1.join()

h2.join()

h3.join()

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

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.

h1.join()

h2.join()

h3.join()

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

Cerrojos de objetos

Cada objeto en Java tiene un cerrojo

s y n c h r o n i z e d ( obj ) {

*/

/*
}

Sólo pueda haber una hebra propietaria del cerrojo.
Sólo una hebra propietaria del cerrojo puede ejecutar un código
synchronized.

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 ComputaciónUniversidad Complutense de Madrid

Programación Concurrente en Java: Threads

Durmiéndose/depertándose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puede

invocar el método wait() del objeto.

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

Durmiéndose/depertándose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puede

invocar el método wait() del objeto.

La hebra queda suspendida hasta que alguien la
despierte.
Se libera para que otra hebra pueda adquirirlo.
Cuando es liberarla debe adquirir de nuevo el
cerrojo para seguir la ejecución.

wait(tiempo) Igual, pero se queda dormida un tiempo máximo.

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

Durmiéndose/depertándose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puede

invocar el método wait() del objeto.

La hebra queda suspendida hasta que alguien la
despierte.
Se libera para que otra hebra pueda adquirirlo.
Cuando es liberarla debe adquirir de nuevo el
cerrojo para seguir la ejecución.

wait(tiempo) Igual, pero se queda dormida un tiempo máximo.

notify() Una hebra que tiene el cerrojo de un objeto puede

invocar el método notify() del objeto.

Luis Fernando Llana Díaz

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

Programación Concurrente en Java: Threads

Durmiéndose/depertándose en un objeto

wait() Una hebra que tiene el cerrojo de un objeto puede

invocar el método wait() del objeto.

La hebra queda suspendida hasta que alguien la
despierte.
Se libera para que otra hebra pueda adquirirlo.
Cuando es liberarla debe adquirir de nuevo el
cerrojo para seguir la ejecución.

wait(tiempo) Igual, pero se queda dormida un tiempo máximo.

notify() Una hebra que tiene el cerrojo de un objeto puede

invocar el método notify() del objeto.

Despierta una hebra suspendida en el objeto.
No libera el cerrojo del objeto.

notifyAll Igual, pero despierta a todas.

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de
  • Links de descarga
http://lwp-l.com/pdf2469

Comentarios de: Programación Concurrente en Java: Threads (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