You are on page 1of 10

Programacin Orientada a Objetos (3

er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
Concurrencia: hilos
2
Hilos
Los hilos son objetos, subclases de Thr ead
(o implementacin de Runnabl e)
En la clase de un hilo se debe definir el mtodo r un
Para ejecutar un hilo:
Crear un objeto de la clase del hilo
Invocar el mtodo st ar t
st ar t hace que se ejecute el mtodo r un
r un tpicamente consiste en un bucle
Las clases Thr ead y Obj ect proporcionan mtodos
para gestionar y sincronizar los hilos
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
3
cl ass Repet i ci on extends Thread {
pr i vat e i nt r epet i ci ones;
pr i vat e St r i ng mensaj e;
Repet i ci on ( St r i ng msg, i nt n) {
mensaj e = msg; r epet i ci ones = n;
}
public void run () {
for (int i = 1; i <= repeticiones; i++)
System.out.println (mensaje + " " + i);
}
}
publ i c st at i c voi d mai n ( St r i ng ar gs[ ] ) {
Repet i ci on r 1 = new Repet i ci on ( " Roj o" , 5) ;
Repet i ci on r 2 = new Repet i ci on ( " Azul " , 80) ;
r 1. start ();
r 2. start ();
}
Creacin de un hilo: la clase Thread
4
Ejecucin de hilos concurrentes
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
5
cl ass Repet i ci on2 implements Runnable {
pr i vat e i nt r epet i ci ones;
pr i vat e St r i ng mensaj e;
Repet i ci on2 ( St r i ng msg, i nt n) {
mensaj e = msg; r epet i ci ones = n;
}
publ i c voi d r un ( ) {
f or ( i nt i = 1; i <= r epet i ci ones; i ++)
Syst em. out . pr i nt l n ( mensaj e + " " + i ) ;
}
}
publ i c st at i c voi d mai n ( St r i ng ar gs[ ] ) {
Repet i ci on r 1 = new Repet i ci on ( " Roj o" , 5) ;
Thread r 2 = new Thread (new Repeticion2 (" Azul " , 80));
r 1. st ar t ( ) ;
r 2. st ar t ( ) ;
}
Creacin de un hilo: la interfaz Runnable
6
Exclusin mutua:
mtodos synchronized
Evitar interferencias entre hilos que manipulan un mismo objeto
Mtodos synchr oni zed de un mismo objeto no pueden ejecutarse a la
vez en hilos concurrentes
El primer hilo que invoca uno de los mtodos bloquea el objeto
Los dems hilos que llamen al mtodo quedan bloqueados mientras tanto
El primer hilo desbloquea el objeto cuando:
Termina
Se detiene con sl eep o wai t
En ese momento los dems hilos compiten por continuar
Slo uno lo consigue
Los dems vuelven a quedar en espera
synchr oni zed tambin se puede aplicar a bloques de cdigo
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
7
cl ass Pl aza {
Pasaj er o pasaj er o = nul l ;
bool ean r eser vada ( ) { r et ur n pasaj er o == nul l ; }
voi d r eser var ( Pasaj er o p) { pasaj er o = p; }
}
cl ass Vuel o {
Pl aza pl azas[ ] ;
Vuel o ( . . . ) { . . . }
synchronized voi d reservar ( Pasaj er o p) {
f or ( i nt i = 0; i < pl azas. l engt h; i ++)
i f ( ! plazas[i].reservada ())
plazas[i].reservar (p);
}
}
Exclusin mutua: ejemplo
8
cl ass Ter mi nal Vent a extends Thread {
publ i c voi d r un ( ) {
Vuel o v;
Pasaj er o p;
. . .
v. reservar ( p) ;
. . .
}
}
publ i c st at i c voi d mai n ( St r i ng ar gs[ ] ) {
Ter mi nal Vent a t 1 = new Ter mi nal Vent a ( . . . ) ;
Ter mi nal Vent a t 2 = new Ter mi nal Vent a ( . . . ) ;
t 1. st ar t ( ) ;
t 2. st ar t ( ) ;
}
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
9
cl ass Ter mi nal Vent a extends Thread {
publ i c voi d r un ( ) {
Vuel o v;
Pasaj er o p;
. . .
/ / Si r eser var no es synchr oni zed
synchr oni zed ( v) {
v. reservar ( p) ;
}
. . .
}
}
10
cl ass Peaton ext ends Thr ead {
Semaforo semaf or o;
Peat on ( Semaf or o s) { semaf or o = s; }
publ i c voi d r un ( ) {
whi l e ( t r ue) semaf or o. set Col or ( " Ver de" ) ;
}
}
cl ass Controlador ext ends Thr ead {
Semaforo semaf or o;
Cont r ol ador ( Semaf or o s) { semaf or o = s; }
publ i c voi d r un ( ) {
whi l e ( t r ue) semaf or o. set Col or ( " Roj o" ) ;
}
}
Coordinacin de hilos: ejemplo
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
11
cl ass Semaforo {
pr i vat e St r i ng col or = " Roj o" ;
St r i ng get Col or ( ) { r et ur n col or ; }
synchr oni zed voi d set Col or ( St r i ng st r ) {
t r y {
whi l e ( st r . equal s ( col or ) ) wait ();
Thread.sleep (2000); / / Demor a de 2 seg.
col or = st r ; Syst em. out . pr i nt l n ( col or ) ;
notifyAll ();
} cat ch ( I nt er r upt edExcept i on ex) {}
}
}
Y si se hiciese
wait(2000)?
12
publ i c st at i c voi d mai n ( St r i ng ar gs[ ] ) {
Semaf or o s = new Semaf or o ( ) ;
Cont r ol ador c = new Cont r ol ador ( s) ;
Peat on p = new Peat on ( s) ;
p. st ar t ( ) ;
c. st ar t ( ) ;
}
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
13
Estados de un hilo
runnable
not
started
not
runnable
dead
stop
start
sleep
wait
notify
(wait)
Ejecutar un thread es
ejecutar su mtodo run
El thread muere por stop
o cuando run termina
14
Mtodos para gestionar
el estado de un hilo
Runnable
r un ( )
Thread i mpl ement s Runnabl e
st ar t ( )
st op ( )
sl eep ( l ong)
Object (deben ser llamados desde un mtodo synchronized)
wai t ( ) , wai t ( l ong)
not i f y ( ) , not i f yAl l ( )
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
15
Dormir un hilo: wait vs. sleep
wait
Se invoca sobre un Obj ect
Slo puede ser llamado desde un
mtodo synchr oni zed
Puede ser despertado con not i f y
desde otro mtodo synchr oni zed
del mismo objeto
wai t ( ) termina por not i f y( )
wai t ( n) termina cuando transcurren
n mseg. o por not i f y( )
sleep
Se invoca sobre un Thr ead
o sobre la clase Thr ead
No se puede despertar hasta que
termina
Termina despus de un tiempo
16
Terminar un hilo con stop
cl ass Hi l o ext ends Thr ead {
publ i c voi d r un ( ) {
whi l e ( t r ue) {
. . .
}
}
}
publ i c st at i c voi d mai n ( St r i ng ar gs[ ] ) {
Hi l o h = new Hi l o ( ) ;
h. st ar t ( ) ;
. . .
h.stop ();
}
Deprecated !
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
17
Terminar un hilo saliendo de run
cl ass Hi l o ext ends Thr ead {
boolean seguir;
publ i c voi d r un ( ) {
seguir = true;
whi l e ( seguir) {
. . .
}
}
}
publ i c st at i c voi d mai n ( St r i ng ar gs[ ] ) {
Hi l o h = new Hi l o ( ) ;
h. st ar t ( ) ;
. . .
h.seguir = false;
}
18
Prioridad de hilos
Asignacin de una prioridad: set Pr i or i t y ( i nt )
Thr ead. MI N_PRI ORI TY 1
Thr ead. NORM_PRI ORI TY 5
Thr ead. MAX_PRI ORI TY 10
Un hilo deja de ejecutarse slo cuando:
El hilo deja de ser runnable
Se arranca otro hilo de mayor prioridad
En algunos sistemas operativos, cuando el planificador activa otro hilo
de igual prioridad
Dependencia del sistema operativo
Programacin Orientada a Objetos (3
er
curso, grupo 31)
9. Concurrencia
25.04.12
Pablo Castells
Escuela Politcnica Superior
Universidad Autnoma de Madrid
19
Otros mtodos de Thread
Thr ead. cur r ent Thr ead( )
set / get Name( St r i ng) , t oSt r i ng( )
set Daemon( bool ean)
yi el d( ) , i nt er r upt ( ) , suspend( ) , r esume( ) , dest r oy( )
i sAl i ve( )
Otras clases y utilidades para manejo de alto nivel (J ava 1.5):
Lock, Execut or , thread pools, etc.
20
Resumen
Los hilos se pueden crear extendiendo Thr ead o implementando Runnabl e
y definiendo r un
Los mtodos synchr oni zed son mutuamente excluyentes entre s para un
mismo objeto
Con sl eep, wai t , not i f y, y utilizando prioridades, se coordinan los hilos
La interaccin entre hilos es delicada, no hay una regla general: se resuelve
considerando todas las combinaciones posibles
Es responsabilidad del programador evitar deadlocks, starvation, o livelocks

You might also like