Vous êtes sur la page 1sur 15

20/01/2015

Arquitecturas Paralelas

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

ndice
INTRODUCCIN
CONCURRENCIA
PARALELISTMO

THREADSenJAVA
CONCEPTOSBSICOS

java.lang.Thread
java.lang.Runnable
FINALIZACIN
PRIORIZACIN
CICLODEVIDA
SINCRONIZACIN

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

20/01/2015

Arquitecturas Paralelas

QuesunThread?
FreeOnlineDictionaryofComputing(FOLDOC)
Compartir una nica CPU entre tareas mltiples (o "hilos") de un modo
diseado para minimizar el tiempo requerido para intercambiar hilos.
Esto se logra al compartir (tanto como sea posible) el entorno de
ejecucin del programa entre los diferentes hilos de manera que se
necesitan guardar y restaurar muy pocos cambios de estado cuando se
intercambian hilos.
Un thread es un flujo de control secuencial en un programa

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

QuesunThread?
Un thread es un flujo de control secuencial en un programa
Trasladanelconceptodemultitareaalaejecucindeunprograma.
Hilo=flujodeejecucin
ElusodehilosconllevamuchosRIESGOS:
Distintosflujosdeejecucinaccediendoalosmismosobjetosdel

programa(!!!) Surgentodoslosproblemasdelaprogramacin
concurrente

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

20/01/2015

Arquitecturas Paralelas

Paraqu?
Paramantenerlacapacidadderespuestadeunaaplicacinduranteuna

tareadelargaejecucin.
Parapermitirlacancelacindetareasseparables.
Algunosproblemassonintrnsecamenteparalelos.
Parasupervisarelestadodealgunosrecursos(DB).
AlgunasAPIysistemasloexigen:Swing.
Paraaprovecharlasventajasdelosprocesadoresmltiples.
Etc.

Concurrencia o paralelismo?

Concurrencia:Cuandodostareaspuedencomenzaroejecutarseenperiodosdetiemposolapados
Paralelismo:Cuandolastareasliteralmentecomienzanalmismotiempo

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

HilosyProcesos
CPU

main
run
Proceso 1

Proceso 2

Proceso 3

Proceso 4

GC

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

20/01/2015

Arquitecturas Paralelas

Concurrencia vs Paralelismo
CPU

CPU1

CPU2

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

Concurrencia vs Paralelismo
CPU

main

CPU1
main

CPU2
RAM
run

main
this.count

run

run

main
run

main
main

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

20/01/2015

Arquitecturas Paralelas

ConcurrenciaenJava
LaconcurrenciaesnaturalenOO
AdaySimula67yasoportabanconcurrencia
Javaesnicoentreloslenguajesdepropsitosgeneralesqueponeprimitivas

deconcurrenciaadisposicindelprogramador

Javasoportalaejecucinparaleladevariosthreads (hilos)
mltiplesthreads ejecutndoseenunamquinapuedencompartirrecursos

(memoria)
mltiplesthreads ejecutndoseenvariasmquinasnecesitancapacidadesde

comunicacin SistemasDistribuidos

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

java.lang.Thread
UnhiloesunobjetocuyaclaseheredadeThread
Definesuflujodeejecucinenunmtodorun()
Ejemplo:
public class Futbolista extends Thread {

public void run() {


...
}
}

Comienzansuejecucinconunallamadaastart()
Futbolista messi = new Futbolista();
messi.start();
ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

10

20/01/2015

Arquitecturas Paralelas

java.lang.Runnable
HeredardeThread puederesultarinconveniente:herenciasimple.
Solucin:usodeinterfaces
interface Runnable {
void run ();

Elhilotienelaopcindeimplementarlainterfaz:
public class Delantero extends Futbolista
implements Runnable{
public void run() { ...}

Perolaclasenoesunhilo,hacefaltaconvertirla:
Delantero messi = new Delantero();
Thread hilo = new Thread(messi);
hilo.start();
11

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

Finalizacindeunhilo
Elflujoprincipaldeunprograma acabacuandoterminaelmtodomain.
Un hilo acaba cuando finaliza el mtodo run() normal o por una excepcin

no capturada.
A veces es necesario detener un hilo, pero debido a cuestiones de

concurrencia la detencin debe ser ordenada: Interrupcin


hilo.interrupt();

Elhilodebecontrolarcuandosesolicitasuinterrupcin:
if (Thread.interrupted()) ...

Consideracionesmtodo interrupted():
Elmtodointerrupted esdeclase parapoderllamarlodesdeunaclasequeno

herededeThread
Lallamadaalmtodoreseteaunflag deinterrupcin.Alternativa:

Thread.currentThread().isInterrupted();

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

12

20/01/2015

Arquitecturas Paralelas

Consideracionesmtodo interrupted()
public void run(){
..
while (no me pidan que interrumpa && tenga trabajo por hacer){
//trabajar
}
//termina el mtodo run y por tanto el hilo de ejecucin
}

obien
public void run(){
try{
..
while (!interrupted() && tenga trabajo por hacer){
//trabajar
}
}catch (InterruptedException e){
//thread was interrupted during sleep or wait
}
//termina el mtodo run y por tanto el hilo de ejecucin
}

ConcurrenciaeHilosenJAVA.

13

Arquitecturas Paralelas

Prioridad
Laprioridaddeunthread afectacuandoseestejecutandoenrelacinaotros
threads.

Todothread enJavatieneunaprioridadenelintervalo:
Thread.MIN_PRIORITY
Thread.MAX_PRIORITY
Thread.NORM_PRIORITY

(constantequevale1)
(constantequevale10)
(constantequevale5)

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

14

20/01/2015

Arquitecturas Paralelas

Ciclodevida
Unhilopuedeestarencuatroestados:
Inicial:antesdeejecutarstart().Enrealidadannoesunhilo.
Enejecucin:trasejecutarstart() yduranteelmtodorun().
Bloqueado:

Enuncandado(sincronizacin ...)
Durmiendo: Thread.sleep(milisegundos);
Finalizado.

Podemosaveriguarsielhiloestenejecucin obloqueado:
hilo.isAlive();

ConcurrenciaeHilosenJAVA.

15

Arquitecturas Paralelas

Ejemploprctico
EscribeunprogramaenJavaconlassiguientescaractersticas:
1. CrearlaclaseabstractaFutbolista conunatributoqueseael

nombredelfutbolista,unmtodojuegaqueimprimaporpantallala
funcindecadafutbolista(porejemplo,delanteromarcagoly
porteroparada)unnmerodeterminadodeveces.
2. CrearlaclaseDelantero queherededelaclaseFutbolista e
implementelainterfazRunnable conelmtodojuega dentrodel
mtodorun.
3. CrearlaclasePortero queherededelaclaseFutbolista e
implementelainterfazRunnable conelmtodojuega dentrodel
mtodorun.

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

16

20/01/2015

Arquitecturas Paralelas

Ejemploprctico
5. CrearunaclasePartido queinstancieobjetostipoFutbolista:

Crear4instanciasdelaclaseDelantero:Messi,Ronaldo,Villa,Higuain
y2instanciasdelaclasePortero:Valdes,Casillas.
CrearelmtodojugarPartido queejecutemediantehiloslasinstancias
anterioresyllamealmtodojuega decadainstancia.
messi.start();
cristiano.start();
higuain.start();
villa.start();
valdes.start();
casillas.start();

17

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

Ejemploprctico.Ejecucin1(sinsleep)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

messi marca
messi marca
messi marca
messi marca
messi marca
higuain marca
higuain marca
higuain marca
higuain marca
higuain marca
casillaspara
casillaspara
casillaspara
casillaspara
casillaspara

16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.

cristianomarca
cristianomarca
cristianomarca
cristianomarca
cristianomarca
villamarca
villamarca
villamarca
villamarca
villamarca
valdes para
valdes para
valdes para
valdes para
valdes para

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

messi.start();
cristiano.start();
higuain.start();
villa.start();
valdes.start();
casillas.start();

18

20/01/2015

Arquitecturas Paralelas

Ejemploprctico.Ejecucin2 (sinsleep)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

messi marca
messi marca
messi marca
messi marca
messi marca
higuain marca
higuain marca
higuain marca
higuain marca
higuain marca
valdes para
valdes para
valdes para
valdes para
valdes para

16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.

cristianomarca
cristianomarca
cristianomarca
cristianomarca
cristianomarca
villamarca
villamarca
villamarca
villamarca
villamarca
casillaspara
casillaspara
casillaspara
casillaspara
casillaspara

messi.start();
cristiano.start();
higuain.start();
villa.start();
valdes.start();
casillas.start();

19

ConcurrenciaeHilosenJAVA.

Arquitecturas Paralelas

Ejemploprctico.Ejecucin3 (consleep)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

villamarca
casillaspara
cristianomarca
valdes para
higuain marca
messi marca
valdes para
higuain marca
messi marca
cristianomarca
casillaspara
villamarca
valdes para
higuain marca
messi marca

16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.

casillaspara
cristianomarca
villamarca
valdes para
higuain marca
messi marca
casillaspara
cristianomarca
villamarca
cristianomarca
messi marca
higuain marca
valdes para
casillaspara
villamarca

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

messi.start();
cristiano.start();
higuain.start();
villa.start();
valdes.start();
casillas.start();

20

10

20/01/2015

Arquitecturas Paralelas

Ejemploprctico.Ejecucin4(consleep)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

villamarca
casillaspara
cristianomarca
messi marca
higuain marca
valdes para
cristianomarca
casillaspara
villamarca
messi marca
higuain marca
valdes para
villamarca
cristianomarca
casillaspara

16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.

messi marca
valdes para
higuain marca
casillaspara
villamarca
cristianomarca
messi marca
valdes para
higuain marca
villamarca
cristianomarca
casillaspara
messi marca
valdes para
higuain marca

ConcurrenciaeHilosenJAVA.

messi.start();
cristiano.start();
higuain.start();
villa.start();
valdes.start();
casillas.start();

21

Arquitecturas Paralelas

Sincronizacin
Varios hilos accediendo a los mismos datos pueden dar lugar a

inconsistencias.
Los hilos pueden utilizar objetos comunes y manipularlos de forma

independiente.
El acceso a las regiones crticas se controla con los mtodos

synchronized. Un mtodo synchronized de un objeto slo puede ser


ejecutado por un nico hilo en cada momento.
El envo y recepcin de seales entre los hilos se realiza con los mtodos
wait(), notify() y notifyAll(), y esto se complementa implementando
un mtodo synchronized
EJEMPLO CLSICO PRODUCTOR / CONSUMIDOR
Un hilo escribe datos en un archivo
Otro hilo lee datos del archivo

Comparten recursos debo sincronizarlos


ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

22

11

20/01/2015

Arquitecturas Paralelas

Sincronizacin
Javausa monitores para lasincronizacin dehilos.
Todo objeto conmtodos synchronizedes unmonitor.
Elmonitorslo permite aunhilo por vez ejecutar unmtodo

synchronizedsobre elobjeto.
Los mtodos que tengan que acceder al mismo objeto, se deben declarar

synchronized para lograr el bloqueo.


La ejecucin de dos mtodos sincronizados es mutuamente excluyente.

ConcurrenciaeHilosenJAVA.

23

Arquitecturas Paralelas

Sincronizacin
Ejemplo:claseDelantero yunmtodogolpeaBalon

class Delantero implements Runnable{


run(){
...
}
....
void marcaGol(){
marcador = marcador + 1;
}
}

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

24

12

20/01/2015

Arquitecturas Paralelas

EjemploSincronizacin
Elescritorescribe5datos
Ellectorlee5datos
Sedebeleercadadatoescrito
1.
2.
3.
4.
5.
6.
7.
8.

escribe

lee

escribe lee
escribe lee

escribiendo0
leyendo0
escribiendo1
leyendo1
escribiendo2
leyendo2
escribiendo3
leyendo3

escribe lee
escribe

ConcurrenciaeHilosenJAVA.

lee

25

Arquitecturas Paralelas

EjemploSincronizacin

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

26

13

20/01/2015

Arquitecturas Paralelas

EjemploSincronizacin

ConcurrenciaeHilosenJAVA.

27

Arquitecturas Paralelas

EjemploSincronizacin

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

28

14

20/01/2015

Arquitecturas Paralelas

Referencias
Rajkumar Buyya,Thamarai Selvi,Xingchen Chu,MasteringOOPwith

Java,McGrawHill(I)Press,NewDelhi,India,2009.
JavaThreadsbyScottOaks&HenryWong(OReilly)
APIdocs
http://download.oracle.com/javase/6/docs/api/

java.lang.Thread,
java.lang.Runnable
java.lang.Object,
java.util.Concurrent

Tutorials
http://download.oracle.com/javase/tutorial/essential/concurrency/index.html
http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html

IntroductiontoJavaThreads
http://www.javaworld.com/javaworld/jw041996/jw04threads.html

ConcurrenciaeHilosenJAVA.

JoseManuelSotoHidalgo

29

15