Professional Documents
Culture Documents
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 {
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
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
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
ConcurrenciaeHilosenJAVA.
23
Arquitecturas Paralelas
Sincronizacin
Ejemplo:claseDelantero yunmtodogolpeaBalon
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