Date post: | 09-Jan-2016 |
Category: |
Documents |
Upload: | israel-marino |
View: | 226 times |
Download: | 0 times |
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 162
Programacioacuten Concurrente
en JavaMeacutetodos sincronizados
Monitores y condiciones
Programacioacuten Concurrente ETSI Informaacutetica-UM MM aardo
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 262
Meacutetodos Sincronizados
$ Cada oampeto Java tiene asociado un oc(cerroampo)
$ a +aara syncronized +uede utiizarse +ara seaar aueos meacutetodos de oampetoue deen eampecutarse en ecusioacuten mutua
$ ntes de eampecutar un meacutetodo sincronizado
ay ue com+etir +ara conseguir e ocde oampeto a ue +ertenece
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 362
Eampem+o0 Proema de os
ampardines +uic cass Cont 1
+rivate int c 2 34
+uic syncronized void inc(int i)1c554
6
+uic syncronized int vaor()1
return c46
6
a eampecucioacuten de inc sereaiza en ecusioacuten mutua
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462
Eampem+o0 Proema de os
ampardines +uic cass +uerta im+ements 7unnae1
Cont c4
+uic ampardin(Cont c)1tisc 2 c46
+uic void run()1for (int i 2 34 i8934 i55)
cinc()4
6
6
a eampecucioacuten de inc sereaiza en ecusioacuten mutua
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562
Eampem+o0 Proema de os
ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1
fina int = 2 34Cont c 2 negt Cont()4
+uertalt + 2 negt +uerta=lt4
for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4
6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4
66
Todas as eras
com+iten
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662
Mecanismo de entradasaida a
Monitor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762
$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de
entrada a im+ementacioacuten +odra usar A Una BIB
A Una IB
A Una BIB asada en +rioridades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 262
Meacutetodos Sincronizados
$ Cada oampeto Java tiene asociado un oc(cerroampo)
$ a +aara syncronized +uede utiizarse +ara seaar aueos meacutetodos de oampetoue deen eampecutarse en ecusioacuten mutua
$ ntes de eampecutar un meacutetodo sincronizado
ay ue com+etir +ara conseguir e ocde oampeto a ue +ertenece
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 362
Eampem+o0 Proema de os
ampardines +uic cass Cont 1
+rivate int c 2 34
+uic syncronized void inc(int i)1c554
6
+uic syncronized int vaor()1
return c46
6
a eampecucioacuten de inc sereaiza en ecusioacuten mutua
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462
Eampem+o0 Proema de os
ampardines +uic cass +uerta im+ements 7unnae1
Cont c4
+uic ampardin(Cont c)1tisc 2 c46
+uic void run()1for (int i 2 34 i8934 i55)
cinc()4
6
6
a eampecucioacuten de inc sereaiza en ecusioacuten mutua
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562
Eampem+o0 Proema de os
ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1
fina int = 2 34Cont c 2 negt Cont()4
+uertalt + 2 negt +uerta=lt4
for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4
6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4
66
Todas as eras
com+iten
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662
Mecanismo de entradasaida a
Monitor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762
$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de
entrada a im+ementacioacuten +odra usar A Una BIB
A Una IB
A Una BIB asada en +rioridades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 362
Eampem+o0 Proema de os
ampardines +uic cass Cont 1
+rivate int c 2 34
+uic syncronized void inc(int i)1c554
6
+uic syncronized int vaor()1
return c46
6
a eampecucioacuten de inc sereaiza en ecusioacuten mutua
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462
Eampem+o0 Proema de os
ampardines +uic cass +uerta im+ements 7unnae1
Cont c4
+uic ampardin(Cont c)1tisc 2 c46
+uic void run()1for (int i 2 34 i8934 i55)
cinc()4
6
6
a eampecucioacuten de inc sereaiza en ecusioacuten mutua
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562
Eampem+o0 Proema de os
ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1
fina int = 2 34Cont c 2 negt Cont()4
+uertalt + 2 negt +uerta=lt4
for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4
6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4
66
Todas as eras
com+iten
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662
Mecanismo de entradasaida a
Monitor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762
$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de
entrada a im+ementacioacuten +odra usar A Una BIB
A Una IB
A Una BIB asada en +rioridades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 462
Eampem+o0 Proema de os
ampardines +uic cass +uerta im+ements 7unnae1
Cont c4
+uic ampardin(Cont c)1tisc 2 c46
+uic void run()1for (int i 2 34 i8934 i55)
cinc()4
6
6
a eampecucioacuten de inc sereaiza en ecusioacuten mutua
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562
Eampem+o0 Proema de os
ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1
fina int = 2 34Cont c 2 negt Cont()4
+uertalt + 2 negt +uerta=lt4
for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4
6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4
66
Todas as eras
com+iten
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662
Mecanismo de entradasaida a
Monitor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762
$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de
entrada a im+ementacioacuten +odra usar A Una BIB
A Una IB
A Una BIB asada en +rioridades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 562
Eampem+o0 Proema de os
ampardines +uic cass UsaJardines 1 +uic static void main(Stringlt args)1
fina int = 2 34Cont c 2 negt Cont()4
+uertalt + 2 negt +uerta=lt4
for (int i 2 34 i8 =4 i55) +ilt 2 negt +uerta(c)4Treadlt + 2 negt Tread=lt4for (int i 2 34 i8 =4 i55) +ilt 2 negt Tread(+ilt)4for (int i 2 34 i8 =4 i55) +iltstart()4for (int i 2 34 i8 =4 i55)try1+iltampoin()4
6catc (Interru+tedEce+tion e)16Systemout+rintn(cvaor())4
66
Todas as eras
com+iten
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662
Mecanismo de entradasaida a
Monitor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762
$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de
entrada a im+ementacioacuten +odra usar A Una BIB
A Una IB
A Una BIB asada en +rioridades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 662
Mecanismo de entradasaida a
Monitor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762
$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de
entrada a im+ementacioacuten +odra usar A Una BIB
A Una IB
A Una BIB asada en +rioridades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 762
$ Java no asigna ninguna estructura concretaa as eras ue estaacuten en e conampunto de
entrada a im+ementacioacuten +odra usar A Una BIB
A Una IB
A Una BIB asada en +rioridades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 862
Condiciones de sincronizacioacuten
Cuando una era ue tiene e oc de un oampetoy dee sus+enderse deido a aguna condicioacuten desincronizacioacutenD se introduce en e conampunto dees+era de oampetoD amando a meacutetodo
void gtait()
Cuando una era eampecuta gtait()0
- iera e oc de oampeto sincronizado
- Se ouea en e conampunto de es+era
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 962
Mecanismo de entradasaida
revisado
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1062
isci+ina de Monitor
os meacutetodos void notify()D void notifiy()des+iertan a unatodas as eras de conampunto dees+era
Java utiiza a disci+ina notify-and-continueD esdecirD a era ue ace notify continFa con eoc de monitor Por o tantoD a era ue es+eradee eampecutar un coacutedigo de ti+o0
gtie (Gcondicion)try 1gtait()46 catc (Ece+tion e)16
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1162
Meacutetodos sincronizados0
ProductorConsumidor +uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1262
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
mientras e uffer estaacute enovacoes+erar
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1362
Meacutetodos sincronizados0
ProductorConsumidor +uic syncronized void +oner(int d) trogts Interru+tedEce+tion1
gtie (numatos 22 tam) gtait()4 ilt 2 d4i 2 (i 5 ) tam4
numatos554notify()46 +uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) gtait()4int au 2 amp4 amp 2 (amp 5 ) tam4numatos--4notify()4return ault46
6
Camia e estado de uffer y
aviso a a otra eraD +or si acaso
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1462
Meacutetodos sincronizados0 conampunto
de es+era Fnico$ Cuando se utiizan meacutetodos sincronizados aysoacuteo un conampunto de es+eraD en e ue +uedenestar sus+endidas eras ue es+eran ue
diferentes condiciones de sincronizacioacuten seanciertas
$ Cuando una era eampecuta notifyD +uede ser ue
no des+ierte a a era adecuadaD +or o uearaacute ue +rogramar un des+ertado en cascada outiizar e meacutetodo notify()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1562
MFti+es +roductores y
consumidoresCondiciones de sincronizacioacutenay varios +rocesos +roductores y consumidoresTodos os +rocesos utiizan e uffer en ecusioacutenmutua
Un +roductor no +uede escriir asta ue no ay sitioen e ufferos consumidores een todos os datos +roducidosDEn e mismo orden Si e uffer estaacute vaco es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1662
MFti+es +roductores yconsumidores
fect
amp
KM f
-su+oniendo +roductor y L consumidores
c 9 L
3 3 9 L
Nndice +ara cada
consumidor
numatos 2 L
3 3 3
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1762
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 9 consume
c 9 L O
3 3 9 L
Nndice +ara cada
consumidor
fconsL 9 3
numatos 2 L
3 3 3
a no +uede consumir maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1862
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e consumidor 3 consume
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fcons9 9 3
numatos 2 9
3 3 3
eampa un ueco ire +ara
e +roductor
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 1962
MFti+es +roductores yconsumidores
fect
amp
KM f
-si e +roductor +roduce
c L L O
3 3 3 9 L
Nndice +ara cada
consumidor
fconsL L
numatos 2 L
L 3 3
Indica a todos ue +ueden
Consumir un dato maacutes
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2062
MFti+es +roductores yconsumidores
+acage mutProdCons4
+uic cass Huffer 1 +rivate intlt 4 uffer +rivate intlt c4 indice de cada consumidor
+rivate intlt fdatos4 +ara cada consumidorD os datos ue e uedan +or eer +rivate intlt fect4 +ara cada datoD as ecturas ue e uedan +rivate int tam4 +rivate int i234 +rivate int amp234 +rivate int numatos 2 34
+rivate int nectores 2 34
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2162
MFti+es +roductores yconsumidores
+uic Huffer(int tDint nectores)1tam 2 t4
2 negt inttamlt4c 2 negt inttamlt4for (int i234i8tam4i55) cilt 2 34tisnectores 2 nectores4fdatos 2 negt intnectoreslt4for (int i234i8nectores4i55)fdatosilt 2 34fect 2 negt inttamlt4
for (int i 2 34 i 8 tam 4 i55)fectilt 2 34Systemout+rintn(Quffer iniciaizadoQ)4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2262
MFti+es +roductores yconsumidores
+uic syncronized void +oner(int idDint d) trogtsInterru+tedEce+tion1
gtie (numatos 22 tam) 1notify()4 gtait()46
ilt 2 d4
for (int c 2 34 c 8 nectores 4 c55) fdatosclt554
fectilt 2 nectores4
i 2 (i 5 ) tam4
numatos554
notify()46
es+erado en cascada
En a saa de es+eraay +rocesos +roductoresy consumidores Cuando se des+ierta
una eraD +uede ser ue tenga uese uir es erando
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2362
MFti+es +roductores yconsumidores
+uic syncronized int etraer(int id) trogts Interru+tedEce+tion1
gtie (fdatosidlt 22 3) 1notify()4 gtait()46
int au 2 cidlt4
fdatosidlt--4
fectcidltlt--4
if (fectcidltlt 22 3) 1numatos--4 notify()46
cidlt 2 (cidlt 5 ) tam4
return ault4
6
es+erado en cascada
Como en e caso de os +roductores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2462
MFti+es +roductores yconsumidores
+uic cass Consumidor im+ements 7unnae1Huffer 4int id4 +uic Consumidor(Huffer D int id)1tis 2 4tisid 2 id46 +uic void run()1int d 2 34Systemout+rintn(Qcomienza consumidorQ)4for (int i234i834i55)1try1d 2 etraer(id)4
6 catc (Ece+tion e)164Systemout+rintn(QConsumidor Q 5 d)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2562
MFti+es +roductores yconsumidores
+uic cass Productor im+ements 7unnae1Huffer 4int id4 +uic Productor(Huffer Dint id)1tis 2 4tisid 2 id4
6
+uic void run()1Systemout+rintn(Qcomienza +roductorQ)4for (int i 2 34 i834 i55)1try 1+oner(idDi)4
6 catc (Ece+tion e)164Systemout+rintn(QProductor Q5i)466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2662
MFti+es +roductores yconsumidores
+uic cass UsaProdCons 1
+uic static void main(Stringlt args)1fina int numCons 2 4Huffer 2 negt Huffer(DnumCons)4
Productor + 2 negt Productor(D)4Consumidorlt c 2 negt ConsumidornumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Consumidor(Di)4Systemout+rintn(Qcomienza e +rogramaQ)4Tread + 2 negt Tread(+)4Treadlt c 2 negt TreadnumConslt4for (int i 2 34 i8numCons4 i55) cilt 2 negt Tread(cilt)4
for (int i 2 34 i8numCons4 i55) ciltstart()4 +start()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2762
MFti+es +roductores yconsumidores con notify
+uic syncronized void +oner(int idDint d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor Q 5 id 5 Quiere +oner Q5d)4gtie (numatos 22 tam) 1 gtait()46Systemout+rintn(Q+roductor Q5 id 5 Q escrie en e ufferQ)4
ilt 2 d4for (int c 2 34 c 8 nectores 4 c55) fdatosclt554 fectilt 2 nectores4i 2 (i 5 ) tam4numatos554
notify()46 ay un nuevo dato
y aviso a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2862
ectoresEscritores (v inampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4
+uic syncronized void +en(int i) trogts Ece+tion1gtie (escriiendo) gtait()4
nectores554Systemout+rintn(QEntra ector Q5i)46
+uic syncronized void +enE(int i) trogts Ece+tion1gtie (escriiendo RR (nectores 3)) gtait()4escriiendo 2 true4Systemout+rintn(QEntra escritor Q5i)46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 2962
ectoresEscritores (v inampusta)
+uic syncronized void Cose(int i) trogts Ece+tion1nectores--4if (nectores 22 3) notify()4Systemout+rintn(QSae ector Q5i)4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1escriiendo 2 fase4notify()4Systemout+rintn(QSae escritor Q5i)46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3062
ectoresEscritores (v inampusta)
+uic cass Escritor im+ements 7unnae1int miId4ControH c4 +uic Escritor(int idDControH c)1miId 2 id4 tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+enE(miId)4Treadsee+()4cCoseE(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3162
ectoresEscritores (v inampusta)
+uic cass ector im+ements 7unnae1int miId4ControH c4 +uic ector(int idDControH c)1miId 2 id4tisc 2 c4
6 +uic void run()1for (int i 2 34 i 8 34 i55)1try1 c+en(miId)4Treadsee+()4cCose(miId)46
catc (Ece+tion e)16466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3262
ectoresEscritores
$ E tener soo una coa de es+era +uede serineficiente si des+ertamos a +rocesos ue
no +ueden continuar su eampecucioacuten +oruetodava no se satisface a condicioacuten +or aue es+eran
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3362
ectoresEscritores (v ampusta)
+uic cass ControH 1 +rivate int nectores 2 34 +rivate ooean escriiendo 2 fase4 +rivate int nEscritores 2 34 +uic syncronized void +en(int i) trogts Ece+tion1
gtie (escriiendo RR (nEscritores 3)) 1Systemout+rintn(Qector uiere entrar Q5i)4gtait()46nectores554
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3462
ectoresEscritores (v ampusta)
+uic syncronized void +enE(int i) trogts Ece+tion1
nEscritores554
gtie (escriiendo RR (nectores 3)) 1
Systemout+rintn(QEscritor uiere entrar Q5i)4
gtait()4
6
escriiendo 2 true4
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3562
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3662
ectoresEscritores (v ampusta) +uic syncronized void Cose(int i) trogts Ece+tion1
nectores--4if (nectores 22 3) notify()4
6
+uic syncronized void CoseE(int i) trogts Ece+tion1nEscritores--4escriiendo 2 fase4notify()4
66
es+ierta a todos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3762
ectoresEscritores (v ampusta)comienza LectoresEscritores
Escritor quiere entrar 0
Escritor quiere entrar 1
Lector quiere entrar 0
Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 5
Lector quiere entrar 6
Lector quiere entrar 7
Lector quiere entrar 8
Lector quiere entrar 9
Lector quiere entrar 10
Lector quiere entrar 11
Lector quiere entrar 12
Lector quiere entrar 13
Escritor quiere entrar 1
Lector quiere entrar 0Lector quiere entrar 1
Lector quiere entrar 2
Lector quiere entrar 3
Lector quiere entrar 4
Lector quiere entrar 6
asta L3 intentos faidos +ara
ectores y 9 Escritores
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3862
amadas anidadas a meacutetodossincronizados
Para ue eampecute e+()D dee otener e oc de e
era
cass Eampem+o1
+uic syncronized void +()1
6
6
Eampem+o e 2 ---
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 3962
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
Para ue e eampecute e+() dee otener e oc de e
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4062
cass Eampem+o91
+uic syncronized void +()1
6
6
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)D oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4162
cass Eampem+o1
+uic syncronized void +()1
6
6
amadas anidadas a meacutetodossincronizados
era tiene oc(e)
Eampem+o e 2 ---
e+()
Eampem+o9 e 2
e+()
cass Eampem+o91
+uic syncronized void +()1
gtait()6
6
Si se eampecuta gtait()D se iera e oc de eD
+ero se mantiene e de eD o ue +uede +roducir oueos
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4262
ProductorConsumidor concondiciones y oueo
+uic cass Condition 1
+uic syncronized void deay()1
try1gtait()4 sus+ende a a era ue o eampecuta
6catc (Ece+tion e)1646
+uic syncronized void resume()1
try1notify()4 des+ierta una era sus+endida
6catc (Ece+tion e)1646
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4362
ProductorConsumidor concondiciones y oueo
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina Condition nolleno = new Condition() +rivate fina Condition novacio = new Condition()
+uic Huffer(int t)1tam 2 t4
2 negt inttamlt466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4462
ProductorConsumidor concondiciones y oueo
+uic syncronized void +oner(int d) trogts Interru+tedEce+tion1gtie (numatos 22 tam) noenodeay()4
ilt 2 d4i 2 (i 5 ) tam4numatos554
novacioresume()46
+uic syncronized int etraer() trogts Interru+tedEce+tion1gtie (numatos 22 3) novaciodeay()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4noenoresume()4return ault46
Houea a aera Huffer
Houea a aera Huffer
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4562
ocs
Los meacutetodosinstrucciones synchronized modelan el acceso exclusivo a lock de unmonitor impliacutecito asociado a un oeto tiacutepicamente un recurso compartidopor varias heras
$in emaro cuando una hera necesita usar mamps de un recurso dee lierar los
locks de los recursos en orden inverso a como se han otenido lo ue enocasiones puede no ser adecuado
acuire()
acuire()
Cacuire()release()
acuire()
release()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4662
ocs
pulic class +eentrantLock
+eentrantLock l = new +eentrantLock()
n Lock para la exclusi-n mutua con la misma
semampntica y comportamiento ue el lock impliacutecito
tipo monitor de los meacutetodos e instrucciones
sincronizadas (synchronized) pero con mamps
posiilidades
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4762
ocs0 e +roema de os ampardines
pulic class Cont
Lock l = new +eentrantLock ()
private int c =
pulic void inc(int i)
llock()
try
c00
1 2inally
lunlock()
1
1
Im+ementacioacuten de ainterfaz oc
Pido e oc
evuevo e oc
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4862
ocs0 e +roema de os ampardines
pulic int valor()
llock()
try
return c
1 2inally lunlock()
1
1
Pido e oc
evuevo e oc
a caacuteusua tryfinay es
necesaria +ara devover e oc des+ueacutes de eampecutar return
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 4962
ocs0 condiciones
public interface Condition
Las condiciones clasi2ican los meacutetodos del monitor (wait notify and
notifyAll) en distintos oetos de 2orma ue es posile tener
m3ltiples conuntos de espera por oeto asociados a locks
Lock l = new +eentrantLock()Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
Para modear as condicionesde sincronizacioacuten usamos aInterfaz Condition
as condiciones se asocian aocs y +ueden definirse tantascomo sea necesario
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5062
ocs0 condiciones
6eacutetodos
void await() throws InterruptedException
$uspende a la hera en la condici-n correspondiente
void signal()
espierta una de las heras ue espera La hera tiene ue conseuir el lockcorrespondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
void signalAll() esperta a todas las heras ue esperan Cada hera tiene ue conseuir el
lock correspondiente antes de continuar su eecuci-n
(disciplina sinal7and7continue)
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5162
ocs0 condiciones
Lock l = new +eentrantLock()
Condition c4 = lnewCondition()
Condition c5 = lnewCondition()
llock()
try
while (condicion1) c1await() mientras condicion1 esperaen c1
condicion1 se satisface
cambia el estado del objeto y condicion2 es cierta
c2signal() despertar na hebra e espera
nally
lnlock()
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5262
ProductorConsumidor
+acage condicion4im+ort ampavauticoncurrentocs4
+uic cass Huffer 1 +rivate intlt 4 +rivate int tam4 +rivate int i234 +rivate int amp234
+rivate int numatos 2 34
+rivate fina 7eentrantoc ocHuffer 2 negt 7eentrantoc()4
+rivate fina Condition noeno 2 ocHuffernegtCondition()4 +rivate fina Condition novacio 2 ocHuffernegtCondition()4
+uic Huffer(int t)1tam 2 t4 2 negt inttamlt46
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5362
ProductorConsumidor
+uic void +oner(int d) trogts Interru+tedEce+tion1Systemout+rintn(Q+roductor uiere +oner Q5d)4try1
ocHufferoc()4gtie (numatos 22 tam) noenoagtait()4 ilt 2 d4i 2 (i 5 ) tam4numatos554novaciosigna()4
6finay1ocHufferunoc()46
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5462
ProductorConsumidor
+uic int etraer() trogts Interru+tedEce+tion1
Systemout+rintn(Qconsumidor uiere etraerQ 5 numatos)4
try1
ocHufferoc()4
gtie (numatos 22 3) novacioagtait()4int au 2 amp4
amp 2 (amp 5 ) tam4
numatos--4
noenosigna()4
return ault46 finay 1ocHufferunoc()46
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5562
Harero ormioacuten
im+ort ampavauticoncurrentocs4 +uic cass Hareria 1
+rivate oc Hoc 2 negt 7eentrantoc()4
+rivate Condition cHire 2 HocnegtCondition()4 +rivate Condition cSiacu+ada 2 HocnegtCondition()4 +rivate Condition cPuertaierta 2 HocnegtCondition()4 +rivate Condition cSiguiente 2 HocnegtCondition()4
+rivate ooean Hire 2 fase4 +rivate ooean Siacu+ada 2 fase4 +rivate ooean Pierta 2 fase4
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5662
Harero ormioacuten
+uic void siguiente()1Hococ()4try1Systemout+rintn(QHarero ireQ)4Hire 2 true4cHiresigna()4gtie (GSiacu+ada)try1cSiacu+adaagtait()46catc (Interru+tedEce+tion e)16
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5762
Harero ormioacuten
+uic void finPear()1Hococ()4try1Pierta 2 true4cPuertaiertasigna()4
gtie (Pierta)try1cSiguienteagtait()46catc (Interru+tedEce+tion e)164
6finay 1Hocunoc()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5862
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()466
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 5962
Harero ormioacuten +uic void Pear(int i)1
Hococ()4try1gtie (GHire)try1cHireagtait()46catc (Interru+tedEce+tion e)164Hire 2 fase4Siacu+ada 2 true4
Systemout+rintn(QCiente Q5i5Q se sienta en a siaQ)4cSiacu+adasigna()4gtie (GPierta)try1cPuertaiertaagtait()46catc (Interru+tedEce+tion e)164Systemout+rintn(QCiente Q5i5Q se vaQ)4Pierta 2 fase4cSiguientesigna()46finay 1
Hocunoc()4666
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6062
Harero ormioacuten
+uic cass Harero im+ements 7unnae 1Hareria 4
+uic Harero(Hareria )1tis 2 46
+uic void run()1gtie (true)1 siguiente()4Systemout+rintn(QHarero Pea CienteQ)4 Harero +ea ciente
finPear()466
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6162
Harero ormioacuten
+uic cass ciente im+ements 7unnae1Hareria 4int id4 +uic ciente(Hareria Dint i)1
tis 2 4
id 2 i46
+uic void run()1 Pear(id)4
6
6
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66
7172019 Me Todos Sincro Niza Dos 2
httpslidepdfcomreaderfullme-todos-sincro-niza-dos-2 6262
Harero ormioacuten +uic cass UsaHareria 1
+uic static void main(Stringlt args)1fina int = 2 94Hareria 2 negt Hareria()4Harero ar 2 negt Harero()4cientelt c 2 negt ciente=lt4
for (int i 2 34 i8=4 i55)
cilt 2 negt ciente(Di)4
Tread 2 negt Tread(ar)4 start()4Treadlt c 2 negt Tread=lt4
for (int i 2 34 i8=4 i55)cilt2 negt Tread(cilt)4
for (int i 2 34 i8=4 i55)ciltstart()4
66