O documento apresenta a agenda de uma palestra sobre programação concorrente com Java. A parte 1 da agenda inclui introdução, motivação, arquitetura de sistemas, tipos de concorrência, programas e processos e problemas com concorrência. A parte 2 e 3 discutem threads, exclusão mútua e sincronização. A parte 4 aborda introdução a sincronização, semáforos, monitores e o perigo de deadlock.
9. Agenda – Parte 1 (Introdução)
1 – Introdução
2 – Motivação
3 – Arquitetura de Sistemas
4 – Tipos de Concorrência
5 – Programas e Processos
6 – Problemas com Concorrência
9
8
10. • Pr am a
ogr Sequenci
al
> N ão ai que a
m s um operação
acont
ece
em um
dado om ent
m o
> É
decor ent da or a
r e f m com o contol é
o r e
passado
em seqüênci ente
a r com andos
> C ada
com ando
deve
serconcl do es
uí ant do
pr m o
óxi com ando ni ar
i ci
• Pr am a oncor ent
ogr C r e
> É
hábi r i ai que a
la ealzarm s um operação
em
um
dado om ent
m o
Footnote position, 12 pts.
Sun onfdental I er nl
C i i : nt nalO y 10
11. • C oncor ênci
r a
> C oncor ênci não um a ar a rvi
r a é t ef ti al
> Tor a ogr ação ai dií l
na pr am m s fci
> D ii t a ealzação
fcula r i dos est
t es
> R eduz ef i dade
a etvi dos est
t es
Pr am as
ogr seqüenci s
ai são azoavel ent ent
r m e endí s
vei
C om pl dade pr
exi é opor onalao am anho
ci t
Pr am as
ogr concor ent em alnão
r es ger
com pariham ai car erstcas
tl t s act í i
Sun onfdental I er nl
C i i : nt nalO y 11
12. Motivação
Escreverpr am as r os dií l
ogr cor et é fci
Escreverpr am as
ogr concor ent cor et é
r es r os
m uio ai dií l
t m s fci
Porque
desenvol ogr as
verpr am concor ent
r es?
Sun onfdental I er nl
C i i : nt nalO y 12
14. Motivação
• Busca m ai
de ordesem penho
• R epresent
ação aspect concor ent
de os r es
do undo eal
m r
• D esenvol m ent de quiet as
vi o ar t ur de
com putador concor ent
es r es
Sun onfdental I er nl
C i i : nt nalO y 14
15. Arquiteturas de Sistemas
• Si em a uliar a
st M tt ef
> Per ie i pr
m t város ocessos
com parihar
tl em o
processador
> C om pariham ent baseado di são t po
tl o na vi do em
> C oncor ênci de ocessam ent e r
r a pr o entada/ da
saí
R R R R R
Processo Processo Processo Processo
e SO e e e e
g g 1 g 2 g 3 g 4
3
4 1
R
e C PU
g
2 Sun C onfi i : InternalO nl
dental y 15
16. Arquiteturas de Sistemas
• Si em a uli ocessador
st M tpr
> Al
oca ocessos
pr nos i pr
város ocessadores
> Tam bém
acont
ece com pariham ent de
o tl o
processadores
M em óra
i
Global
C PU C PU C PU
M em óra
i M em óra
i M em óra
i
Local Local Local
Sun onfdental I er nl
C i i : nt nalO y 16
17. Arquiteturas de Sistemas
• Si em as i rbuí
st D sti dos
> C onsi e város
st de i com put
ador que
es oper
am
i
ndependent ent m as
em e que com uni
se cam
> Provê ai
m ordesem penho egado i em ent a
agr e ncr a
confabii
i ldade
C PU
M em óra
i
Local
C PU C PU
M em óra
i M em óra
i
Local Local
C PU
M em óra i
C i Local O y
Sun onfdental I er nl
i : nt nal 17
18. Agenda – Parte 1 (Introdução)
1 – Introdução
2 – Motivação
3 – Arquitetura de Sistemas
4 – Tipos de Concorrência
5 – Programas e Processos
6 – Problemas com Concorrência
18
17
19. Tipos de Concorrência
• C oncor ênci Fí ca par elsm o)
r a si ( al i
> C ada dade execut
uni é ada
em um
processadordedi
cado
• C oncor ênci Lógi
r a ca
> Processadoré
chaveada um a dade
de uni
par outa
a r
> C ausa i pr
a m essão
que uni
as dades
execut m ulaneam ent
am si t e
Sun onfdental I er nl
C i i : nt nalO y 19
20. Programas e Processos
• Processo
Sequenci
al
> É
um conj o ot m ent or
unt t al e denado passos
de
> D ado
quai
squerdoi passos sem pr
s é e
possí ndi
veli carqualé prm eio
o i r
> C ada
passo
sendo a udança est
um m de ado
em gum
al com ponent do st a
e si em de
com putação
Sun onfdental I er nl
C i i : nt nalO y 20
21. Programas e Processos
• Pr am a
ogr Sequenci
al
> Especii as
fca possí s udanças est
vei m de ado
de ocesso
um pr seqüenci
al
> Estut a contol do ogr a er i a
r ur de r e pr am det m na
ordem execução
de
> Ações
são denadas as egr de
or pel r as
seqüenciação lnguagem pr am ação
da i de ogr
adotada
– D efne
i com o contol é
o r e passado com ando
de a
com ando
Sun onfdental I er nl
C i i : nt nalO y 21
22. Programas e Processos
• Pr am a oncor ent
ogr C r e
> Especii as
fca possí s udanças est
vei m de ado
de s m ai pr
doi ou s ocessos
seqüenci s
ai
> N enhum a dem i plciam ent defni
or é m i t e i da
ente m udanças est
r as de ados
dos ocessos
pr
> Processos
são t execut
dios ar
concor ent ent
r em e
> Processos
podem é esm o
at m execut
ar
si ulaneam ent
m t e
Sun onfdental I er nl
C i i : nt nalO y 22
23. Problemas com Concorrência
• D et m i sm o N ão et m i sm o
er ni x D er ni
> Pr am as
ogr seqüênci cor et são
as r os
det m i stcos
er ní i
– Seguem a
um seqüênci de
a passos que
pode
ser
com pl am ent r oduzi em úli as
et e epr da m tpl
execuções com m esm os
os dados entada
de r
> D et m i sm o or possí ii valdar
er ni t na velverfcare i
pr am as a est
ogr vi t es
Sun onfdental I er nl
C i i : nt nalO y 23
24. Problemas com Concorrência
• D et m i sm o N ão et m i sm o
er ni x D er ni
> U m ogr a
pr am concor ent é
r e não er i stco
det m ní i
– U ni
dades execução osseguem a dem
de pr em um or não
predefni
i da
> N ão possí edi seqüênci de
é velpr zera a passos
que
é
r i
ealzada o esulado i
ou r t fnal
> M úli as
tpl execuções pr am a
do ogr concor ent com
r e os
m esm os
dados entada
de r podem arr
ger esulados
t
dier es
f ent
> Sequênci de
a passos r
e esulado i
t fnaldependem
do
escal
onam ent i er
o nt no
Sun onfdental I er nl
C i i : nt nalO y 24
25. Problemas com Concorrência
• D et m i sm o N ão et m i sm o
er ni x D er ni
> U m ogr a
pr am concor ent i
r e ncor et ...
r o
– Pode ero
t com poram ent esper
t o ado gr
a ande ai i
m ora
das
vezes
– Pode f m a nt m ient e r epr
de or i er t e ir odutveldesvi
í ar se
do
com poram ent nor al
t o m
> Er os pr am ação
r de ogr concor ent são uio fcei de
r e m t dií s
di
agnostcar
i
> N ão er i sm o um
det m ni é pont chave pr am ação
o da ogr
concor ent
r e
> Tor bast e fci pr am ação
na ant dií la ogr
Sun onfdental I er nl
C i i : nt nalO y 25
26. Problemas com Concorrência
• D ependênci de oci
a Vel dade
> U m ogr a
pr am seqüenci i
alé ndependent da oci
e vel dade
– C or et
r ude
não
depende vel dade execução
da oci de
> R esulado um ogr a
t de pr am concor ent é
r e dependent
e
da oci
vel dade
– D epende vel dade el i com
da oci r atva que pr
os ocessos
seqüenci s
ai constt nt são
iui es execut
ados
– Pequenas l uações andôm i na oci
fut r cas vel dade
do
processadore sposii de r
di tvos entada/ da
saí podem
l
evarao
não er i sm o
det m ni
Sun onfdental I er nl
C i i : nt nalO y 26
27. Problemas com Concorrência
• D ependênci de oci
a Vel dade
> Q uando r
os esulados
t são
dependent da
es
vel dade z que st um a
oci di se exi e condi
ção
de
cor i ( ace
rda r condii
ton)
– R esulados
t podem m pr sí s
seri evi vei
P: s := “ABCDE”
Q: s := “FGHIJ”
s = “ABCDE” s = “FGHIJ” s = “ABHIE”
Sun onfdental I er nl
C i i : nt nalO y 27
28. Problemas com Concorrência
• D ependênci de oci
a Vel dade
> R equera adoção conceio at i dade
do t de om ci
– U m a i
varávelé ôm i quando i
at ca é nspecionada
e
at i
ualzada sem qual
queri er upção
nt r no
processam ento
> At i dade
om ci não esol o obl a al
r ve pr em ger
LD reg, i LD reg, i
P: i := i + 1
INC reg ML reg, 2
Q: i := 2 * i ST i, reg ST i, reg
i = 2 i = 1 i = 0
Sun onfdental I er nl
C i i : nt nalO y 28
29. Problemas com Concorrência
• D eadl
ock
> D oi ou ai pr
s m s ocessos
encontam i possi lt
r se m biiados
de azerqual
f querpr esso pr
ogr no ocessam ent
o
> G erado unção
em f das út
m uas
dem andas
i
ncom patvei porr
í s ecursos
> Pode
ocor erse som ent se segui es
r e e as nt condi
ções
são i eias
satsf t
– Excl
usão út
M ua
– Aqui ção ncr ent
si I em al
– N ão eem pção
Pr
– Esper C icul
a r ar
Sun onfdental I er nl
C i i : nt nalO y 29
30. Problemas com Concorrência
• D eadl
ock
> Excl usão út
M ua
– Processos
possuem
acesso usi aos ecur
excl vo r sos
P1 R P2
Enquant um ocesso erdados t ado,
o pr l do ecl
não az
f sentdo m ii r pr
i per trouto ocesso usaro
t ado m esm o em po
ecl ao t
Sun onfdental I er nl
C i i : nt nalO y 30
31. Problemas com Concorrência
• D eadl
ock
> Aqui ção ncr ent
si I em al
– Processo ant ecur
m ém r sos evi ent adquii
pr am e rdos
enquant aguar porouto ecur
o da r r so
P1 P2
R1 R2 R3
Enquant um ocesso
o pr esper pel D VD ,não
a o
f sentdo i aro
az i lber scannerpr am ent
evi e
adquii par copi
rdo a ardados e a D VD
del par o
Sun onfdental I er nl
C i i : nt nalO y 31
32. Problemas com Concorrência
• D eadl
ock
> N ão eem pção
Pr
– R ecursos
não podem em ovi
serr dos um
de
processo é
at que am unt i ent lber
sej vol aram e i ados
P2
U m qui al
ar vo ocado um
a
dado ocesso
pr não pode
P1 R serlber
i ado é
at que
oper ações at i
de ualzação
sej
am concl das
uí
Pn
Sun onfdental I er nl
C i i : nt nalO y 32
33. Problemas com Concorrência
• D eadl
ock
> Esper C icul
a r ar
– Pode strum cl de ecur
exi i ci o r sos pr
e ocessos no
qualcada ocesso á
pr est aguardando ecur
r sos que
são antdos o óxi o ocesso ci o
m i pel pr m pr no cl
P1
Processo m ant
P1 ém um
D VD ,que r
é equerdo o
i pel
processo P2,que,porsua
R1 R2
vez,m ant
ém um scanner ,
que r
é equerdo o
i pel
processo P1
P2
Sun onfdental I er nl
C i i : nt nalO y 33
34. Problemas com Concorrência
• R esol
vendo eadl
D ocks
>I
gnor assum i
are rque
não ocor e
r
– U suáro r a f m a ai conveni e
i tat da or m s ent que
encontar
r
– Em alé r ado ei ci i
ger tat r ni alzando si em a
o st
Sun onfdental I er nl
C i i : nt nalO y 34
35. Problemas com Concorrência
• R esol
vendo eadl
D ocks
> Per ii
m trocor er as ect cor i r
r ,m det are rgi
aut atcam ent
om i e
– M ant si em a
ém o st com o odo unci
um t f onando
– Pode epr
r esent at ocessos
arm arpr envol dos
vi
– Pode
adot conceio r lback
aro t de ol
– R est a pr
aur os ocessos um
a pont ant i deadl
o erorao ock
– Adot o
a conceio checkpoi a ar pont
t de ntpar m caros os
de et no
r or
Sun onfdental I er nl
C i i : nt nalO y 35
36. Problemas com Concorrência
• R esol
vendo eadl
D ocks
> Preveni em ovendo a m ai pr condi
rr um ou s é ções
– Elm i aqui ção ncr ent ,r
i nara si i em al equi t
siando odos
t os
recursos
em conj o
unt
– Alocação eci
ant pada
pode arpobr utlzação
ger e ii de
recursos
– Elm i esper i em ent ,i pondo a
i nara a ncr al m um seqüênci
a
úni par r
ca a equi ção
si dos ecur
r sos
– Seqüênci bem eci
a sel onada
pode arm el
ger hor
utlzação
ii
– N ão a
ger boa ii
utlzação r
de ecursos odos casos
em t os
– I põe sci i na ogr ação
m di plna pr am
Sun onfdental I er nl
C i i : nt nalO y 36
37. Problemas com Concorrência
• St vaton
ar i
> Processo i
é ndefni
i dam ent i pedi de
e m do execut
ar
em unção escal
f de onam ent i ust
o nj o
– Saf y
et
– C oi r ns
sas ui não
acont
ecem
– Li
veness
– C oi boas
sas event m ent acont
ual e ecem
– Processo ar al
f á gum ogr
pr esso
em um dado nt val
i er o
de em po
t
> Som ent pode t
e sereviado o st a lvr de
se si em é i e
deadl e
ock adot um
a escal
onam ent j o
o ust
Sun onfdental I er nl
C i i : nt nalO y 37
38. Problemas com Concorrência
• St vaton
ar i
> Escal onam ent Just
o o
– Processo col
é ocado a ia
em um fl associ
ada
ao
recur r
so equi t
siado
– Se ecur t na di
r so or se sponí ,um ocesso fl
vel pr na ia
event m ent ganha acesso r
ual e o ao ecurso
> Escal onam ent I ust
o nj o
– Acesso ef enci pr
pr er ala ocessos ala i i
de t prordade
– Pode et dari
r ar ndefni
i dam ent um ocesso
e pr de
bai prordade
xa i i
Sun onfdental I er nl
C i i : nt nalO y 38
39. Agenda – Parte 1 (Introdução)
1 – Introdução
2 – Motivação
3 – Arquitetura de Sistemas
4 – Tipos de Concorrência
5 – Programas e Processos
6 – Problemas com Concorrência
39
37
41. Agenda – Parte 2 (Threads)
1 – Características
2 – Threads em Java
3 – Classe Threads
4 – Interface Runnable
5 – Programas e Processos
6 – Threads x Runnable
7 – Terminando Threads
8 – Prioridades
9 – Gerenciamento de Threads
10 – Ciclo de Vida
41
39
42. Características
• Per ie úli as i
m t m tpl lnhas fuxo contol de
de l de r e
pr am a
ogr coexi i co ocesso
strem um úni pr
• C om pariham ecur
tl r sos um ocesso
de pr
> Espaço ender
de eços pr
do ocesso
• C ada hr
t ead possuiseu
contadorde ogr a
pr am
i vi
ndi dual l e i
,piha varávei l s
s ocai
• C om uni
cação a em óra
vi m i com parihada
tl
• Tam bém denom i
nado ocesso eve lght ei
pr l (i w ght
process)
Sun onfdental I er nl
C i i : nt nalO y 42
43. Características
• Em onopr
m ocessador ...
es
> Processadoré
com parihado r os hr
tl ente t eads
> Si em a
st oper onalr i o
aci ealza escal
onam ent
o
de hr
t eads um ocesso
de pr
> Threads
não
são
execut
ados
si ulaneam ent
m t e
> Provê
supore concor ênci l ca,baseada
t a r a ógi
na vi
di são t po tm e i ng)
do em (i slci
Sun onfdental I er nl
C i i : nt nalO y 43
44. Características
• Em uli ocessador ...
m tpr es
> C ada hr
t ead
pode ocado um
seral a
processador
> Si em a
st oper onalr i o
aci ealza escal
onam ent
o
e ocação t eads pr
al de hr a ocessadores
> Threads
podem
serexecut
ados
si ulaneam ent
m t e
> Provê
supore concor ênci fsi
t a r a í ca
Sun onfdental I er nl
C i i : nt nalO y 44
45. Características
• Execut m ulânea assi onam ent
am si t e ncr e
> Threads
podem odii i
m fcarvarávei
s
com parihadas
tl com r t eads
outos hr
> Pode oduzi esulados m pr sí s
pr rr t i evi vei
• R equera
adoção m ecani os
de sm
explcios si oni
í t de ncr zação
Sun onfdental I er nl
C i i : nt nalO y 45
46. Threads em Java
• Java
supora
t concor ênci a velde i
r a ní lnguagem
> A i
lnguagem
C supora
t concor ênci em
r a
bi i ecas f
blot de unções
• Adot um odel pr
a m o eem ptvo execução
i de
> I er os pr
nt val do ocessadorsão ocados
al aos
t eads odel r
hr em um m o ound obi
r n
• Supora conceio prordade
t o t de i i
• I pl ent
m em ado cl
na asse ead na nt f
Thr e i erace
R unnabl
e
Sun onfdental I er nl
C i i : nt nalO y 46
47. Threads em Java
• Todo ogr a
pr am consi e pel m enos
st de o
um hr
t ead
que
execut o ét
a m odo main
> t ead i pal( ai t ead)
hr prnci m n hr
• O utos hr
r t eads nt nos
i er podem i
sercrados
i er
nt nam ent pel JVM
e a
> D epende cada m pl ent
de i em ação JVM
de
• O utos hr
r t eads ní usuáro
a velde i podem
serexplciam ent crados o ogr a
it e i pel pr am
Sun onfdental I er nl
C i i : nt nalO y 47
48. Classe Thread
• D eve est
se endera asse
cl Thread
• Sobreporo ét
m odo
run
> M ét
odo
execut
ado
quando t ead i ci
o hr é ni ado
• I anci város et t ead
nst arum ou i obj os hr
• Atvaro ét
i m odo dos et t ead a ni aros hr
start obj os hr par i ci t eads
cor espondent
r es
public class HelloWorldThread extends Thread {
public void run() {
System.out.println(“Hello World”);
}
public static void main(String[] args) {
HelloWorldThread t = new HelloWorldThread();
t.start();
}
Sun onfdental I er nl
C i i : nt nalO y 48
49. Classe Thread
class MyThread extends Thread {
private String message;
public MyThread(String m) {message = m;}
public void run() {
for(int r=0; r<20; r++)
System.out.println(message);
}
}
public class ThreadDemo {
public static void main(String[] args) {
MyThread t1,t2;
t1=new MyThread("primeiro thread");
t2=new MyThread("segundo thread");
t1.start();
t2.start();
}
}
Sun onfdental I er nl
C i i : nt nalO y 49
50. Interface Runnable
• D eve i pl ent i erace
se m em ara nt f Runnable
• I pl ent m ét
m em aro odo run
> M ét
odo
execut
ado
quando t ead i ci
o hr é ni ado
• I anci város et t ead
nst arum ou i obj os hr
• Atvaro ét
i m odo start dos et t ead a ni aros
obj os hr par i ci
t eads r
hr cor espondent
es
public class HelloWorldThread implements Runnable {
public void run() {
System.out.println(“Hello World”);
}
public static void main(String[] args) {
HelloWorldThread h = new HelloWorldThread();
Thread t = new Thread(h);
t.start();
} Sun onfdental I er nl
C i i : nt nalO y 50
51. Interface Runnable
class MyThread implements Runnable {
private String message;
public MyThread(String m) {message = m;}
public void run() {
for(int r=0; r<20; r++)
System.out.println(message);
}
}
public class ThreadDemo {
public static void main(String[] args) {
MyThread r1,r2;
Thread t1, t2;
r1=new MyThread("primeiro thread");
r2=new MyThread("segundo thread");
t1 = new Thread(r1);
t2 = new Thread(r2);
t1.start();
t2.start();
}
} Sun onfdental I er nl
C i i : nt nalO y 51
52. Threads x Runnable
• Estendera asse
cl Thread m possi lt
i biia
herança outa asse
de r cl
> Java
não
supora ança úli a
t her m tpl
• I pl ent i erace
m em ara nt f Runnable
per ie her
m t a ança outa asse
de r cl
> Java m ie prm ii
per t as i tvas e
extends
implements em
ser usadas
conj am ent
unt e
Sun onfdental I er nl
C i i : nt nalO y 52
53. Agenda – Parte 2 (Threads)
1 – Características
2 – Threads em Java
3 – Classe Threads
4 – Interface Runnable
5 – Programas e Processos
6 – Threads x Runnable
7 – Terminando Threads
8 – Prioridades
9 – Gerenciamento de Threads
10 – Ciclo de Vida
53
51
54. Terminando Threads
• U m hr
t ead er i quando m ét
t m na o odo é
run
concl do
uí
> M ét
odo
run et na m al ent
r or nor m e
> M ét
odo
run ança a
l um exceção
não
capt ada
ur
• Threads
não
podem ei ci i
serr ni alzados
> I
nvocaro ét
m odo
start ai que a
m s um vez a
ger a
exceção
InvalidThreadStateException
• M étodo isAlive pode
serusado a ii
par verfcar
se t ead
o hr não oit m i
f er nado
Sun onfdental I er nl
C i i : nt nalO y 54
55. Prioridades
• Pode
serusada a
par expressara
i porânci ou gênci de f ent
m t a ur a dier es
t eads
hr
• Poltcas escal
íi de onam ent de hr
o t eads
não são
padr zadas
oni em Java
> D ependent da m pl ent
e i em ação JVM
da
> Em al ef ênci é
ger ,pr er a dada t eads
a hr de
m ai i i
orprordade
Sun onfdental I er nl
C i i : nt nalO y 55
56. Prioridades
• C ada hr
t ead
possuium a i i
prordade que i
vara
ente
r Thread.MIN_PRIORITY 1)e
(
Thread.MAX_PRIORITY 10)
(
• Pordef t
aul,cada
novo hr
t ead em prordade
t a i i
do hr
t ead
pai
> Thread i palassoci
prnci ado
com m ét
o odo main em
t
a i i
prordade
Thread.NORM_PRIORITY 5)
(
• Prordade um hr
i i de t ead pode dentfcada
seri ii e
m odii
fcada com m ét
os odos getPriority e
setPriority
Sun onfdental I er nl
C i i : nt nalO y 56
57. Gerenciamento de Threads
• A asse ead i di sos ét
cl Thr defne ver m odos a
par
gerenci ent dos hr
am o t eads
> M ét
odos átcos i
est i atvados o ópro hr
pel pr i t ead
– Provêem nf m ações
i or sobr o ópro hr
e pr i t ead
– Aler est
t am o ado pr i t ead
do ópro hr
> O utos ét
r m odos
que
podem nvocados r
seri poroutos
t eads
hr
public static Thread currentThread()
Retorna uma referência ao thread atualmente em execução.
Sun onfdental I er nl
C i i : nt nalO y 57
58. Gerenciamento de Threads
• Pausando Execução
a
> O ét
m odo suspende execução
Thread.sleep a
do ópro hr
pr i t ead í
porum perodo t po
de em
especii
fcado
– Tor o ocessadordi
na pr sponí a r t eads
velpar outos hr
– Pode
serusado a egul t po execução
par r aro em de
– Pr são
eci depende
dos em porzador do st a do
t i es si em e
escal
onador
public static void sleep(long millis)
public static void sleep(long millis, int nanos)
Sun onfdental I er nl
C i i : nt nalO y 58
59. Gerenciamento de Threads
• Pausando Execução
a
> Tem po pausa
de pode er i
sert m nado
por
i er upções
nt r
– G er a
a exceção
InterruptedException
...
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
return;
}
...
Sun onfdental I er nl
C i i : nt nalO y 59
60. Gerenciamento de Threads
• Pausando Execução
a
> O ét
m odo átco
est i Thread.yield
causa
o
t ead
hr pausart por i ent
em aram e
– Per ie
m t que r t eads
outos hr possam
execut
ar
public static void yield()
Sun onfdental I er nl
C i i : nt nalO y 60
61. Gerenciamento de Threads
• Aguardando t m i
o ér no
> O ét
m odo
join m ie hr
per t um t ead
aguar t m i de
daro ér no um
outo hr
r t ead
–Invocação
causa t ead
o hr pausarat o ér i do r
é t m no outo
t ead
hr
> Tam bém possí
é velespecii í
fcarum perodo t po a
de em par
esper t m i do hr
aro ér no t ead
– Pr são
eci depende
dos em porzador do st a do
t i es si em e
escal
onador
> Pode er i
sert m nado nt r
pori er upções
– G er a
a exceção
InterruptedException
public final void join()
public final void join(long millis)
public final void join(long millis, int nanos)
Sun onfdental I er nl
C i i : nt nalO y 61
62. Ciclo de Vida
Alve
i
R unni
ng sl
eep()
suspend()
w ai(
t)
yi d(
el ) di
spat
ch
suspend()
st t)
ar(
R unnabl
e N on unnabl
R e
resum e()
notf )
iy(
st )
op(
r )r ur
un( et ns
Sun onfdental I er nl
C i i : nt nalO y 62
63. Agenda – Parte 2 (Threads)
1 – Características
2 – Threads em Java
3 – Classe Threads
4 – Interface Runnable
5 – Programas e Processos
6 – Threads x Runnable
7 – Terminando Threads
8 – Prioridades
9 – Gerenciamento de Threads
10 – Ciclo de Vida
63
62
66. Introdução
• Processos t eads
ou hr que
com pariham
tl dados
devem ncr zaro
si oni acesso aos
dados
> Evia
t que ualzações am di
at i sej per das unção
em f do
acesso
concor ent
r e
i := i + 1 P: LD reg, i P: LD reg, i
P: INC R P: INC R
P: ST i,reg Q: LD reg, i
LD reg, i Q: LD reg, i Q: INC R
INC reg Q: INC R P: ST i, reg
ST i, reg Q: ST i, reg Q: ST i, reg
i = 0 i = 2 i = 1
Sun onfdental I er nl
C i i : nt nalO y 66
68. Seção Crítica
• Trecho códi que eci ser
de go pr sa
executado f m a ôm i
de or at ca
> A
seção íi cont i r
crtca ém as nstuções
que
acessam ecur
r sos
com parihados
tl
• Tam bém
denom i
nada egi crtca
r ão íi
• Par assegur
a arque a
um seção íi é
crtca
executada om i
at cam ent deve adot
e se ar
técni de usão út
cas excl m ua
Sun onfdental I er nl
C i i : nt nalO y 68
69. Exclusão Mútua
• Técni que
ca assegur que
a apenas
um
úni pr
co ocesso t ead
ou hr pode execut
ara
seção íi
crtca
> Se ocesso á
um pr est execut
ando
sua
seção
crtca,outos ocessos
íi r pr não podem r
entarem
suas ópras
pr i seções íi
crtcas
> U m ocesso
pr não
pode r
entarem sua
seção
crtca qual
íi se querouto ocesso i
r pr estverem
sua ópra
pr i seção íi
crtca
Sun onfdental I er nl
C i i : nt nalO y 69
70. Execução Concorrente
Processo
A Processo
B Processo
C
... ... ...
Código não crítico Código não crítico Código não crítico
... ... ...
RequisitaExclusão RequisitaExclusão RequisitaExclusão
... ... ...
Seção crítica Seção crítica Seção crítica
... ... ...
LiberaExclusão LiberaExclusão LiberaExclusão
... ... ...
Código não crítico Código não crítico Código não crítico
... ... ...
Sun onfdental I er nl
C i i : nt nalO y 70
71. Execução Concorrente
• Processos
podem execut
arconcor ent ent
r em e,
excet nas
o seções íi
crtcas
Processo
A Processo
B Processo
C
... ... ...
Código não crítico Código não crítico Código não crítico
... ... ...
RequisitaExclusão RequisitaExclusão RequisitaExclusão
... ... ...
Seção crítica Seção crítica Seção crítica
... ... ...
LiberaExclusão LiberaExclusão LiberaExclusão
... ... ...
Código não crítico Código não crítico Código não crítico
... ... ...
Sun onfdental I er nl
C i i : nt nalO y 71
72. Execução Concorrente
• U m co ocesso r na
úni pr enta seção íi
crtca
> D em ai pr
s ocessos
devem oqueados
serbl quando
al
cançam
suas
seções íi
crtcas
Processo
A Processo
B Processo
C
... ... ...
Código não crítico Código não crítico Código não crítico
... ... ...
RequisitaExclusão RequisitaExclusão RequisitaExclusão
... ... ...
Seção crítica Seção crítica Seção crítica
... ... ...
LiberaExclusão LiberaExclusão LiberaExclusão
... ... ...
Código não crítico Código não crítico Código não crítico
... ... ...
Sun onfdental I er nl
C i i : nt nalO y 72
73. Implementando Exclusão Mútua
• C om o antra usão út
gar i excl m ua?
• O que devem os azerant que
f es um
processo r em
ente sua seção íi
crtca?
• O que devem os azerquando
f um
processo er i sua
t m na seção íi
crtca?
Sun onfdental I er nl
C i i : nt nalO y 73
74. Implementando Exclusão Mútua
• Entada Sessão rtca R equi t usão)
r na C íi ( siaExcl
> Verfcarse r pr
ii outo ocesso á
est em sua
pr i seção íi
ópra crtca
> C aso im atvo,bl
afr i oquearo ocesso é
pr at que
o r pr
outo ocesso a seção íi
sai da crtca
> Senão,passarà
execução seção íi
da crtca
• Saí da
da Sessão rtca Li aExcl
C íi ( ber usão)
> I or aros r pr
nf m outos ocessos
que sessão
a
crtca oiconcl da
íi f uí
Sun onfdental I er nl
C i i : nt nalO y 74
75. Implementando Exclusão Mútua
• Prm ii do i R equi t
i tvas tpo siaExcl
usão
e
Li aExcl
ber usão ant excl
gar em a usão út
m ua
• M as
...
C om o m pl ent ai prm ii
i em art s i tvas?
É
possí m pl ent l
veli em áas?
Exi em i f m as i pl ent l
st váras or de m em áas?
São f li pl ent
de áci m em ação?
Sun onfdental I er nl
C i i : nt nalO y 75
76. Variável booleana compartilhada
• Verdadeia
r
> Um
dos ocessos á r ão íi
pr est na egi crtca
• Fal
sa
> N enhum
dos ocessos á r ão íi
pr est na egi crtca
Sun onfdental I er nl
C i i : nt nalO y 76
77. Variável booleana compartilhada
Processo
P2
Begin {RequisitaExclusão}
Variável Global
If Ocupado then Wait;
Ocupado: Boolean;
Ocupado = True;
End {RequisitaExclusão}
...
Processo
P1 Seção crítica
Begin {RequisitaExclusão} ...
If Ocupado then Wait; Begin {LiberaExclusão}
Ocupado = True; Ocupado = False;
End {RequisitaExclusão} If P1 esperando then reative-o;
... End {LiberaExclusão}
Seção crítica
...
Begin {LiberaExclusão}
Ocupado = False;
If P2 esperando then reative-o;
End {LiberaExclusão} Pseudocódi
go
Sun onfdental I er nl
C i i : nt nalO y 77
78. Variável booleana compartilhada
public interface Lock {
public void requestCS();
public void releaseCS();
}
public class LockImpl implements Lock {
boolean busy = false;
public void requestCS() {
while (busy);
busy = true;
}
public void releaseCS() {
busy = false;
}
} em
Java
Sun onfdental I er nl
C i i : nt nalO y 78
79. Variável booleana compartilhada
public class MyLock extends Thread {
Lock lock; em
Java
public MyLock(Lock lock) {
this.lock = lock;
}
public void run() {
while (true) {
lock.requestCS();
// Seção crítica
lock.releaseCS();
} public static void main (String[] args) {
} Lock lock = new LockImpl();
} MyLock t1 = new MyLock(lock);
MyLock t2 = new MyLock(lock);
t1.start();
t2.start();
} Sun onfdental I ernalO nl
C i i : nt y 79
81. Não garante a exclusão mútua
public class LockImpl implements Lock {
boolean busy = false;
public void requestCS() {
while (busy);
busy = true;
}
public void releaseCS() {
busy = false;
}
}
Sun onfdental I er nl
C i i : nt nalO y 81
84. Agenda – Parte 4 (Sincronização)
1 – Introdução
2 – Semáforos
- Tipos de Semáforo
- Exclusão Mútua com Semáforo
- Semáforo em Java
- Problema Produtor-Consumidor
- Sincronização com Semáforo
3 – Monitores
- Introdução
- Monitores x Semáforos
- Monitores em Java
- Métodos Sincronizados
- Trechos de Código Sincronizado
- Perigo de Deadlock
- Problema Produtor-Consumidor 84
83
85. Introdução
• Soluções a usão út baseadas
par excl m ua na
esper ocupada
a são uio as
m t car
> Processo epetdam ent verfca a
r i e ii se condi
ção
de
entada sessão íi é i eia
r na crtca satsf t
> D esper ça
di capaci
dade pr
de ocessam ent
o
> N ão a esulado unci
ger r t f onalútl
i
• Soluções
devem deal ent verfcara
i m e ii condi
ção
de r
entada apenas quando i eia
satsf t
> N ão
consom e cl de ocessador
ci os pr
desnecessaram ent
i e
> R equersupore si em a
t do onfidential: Internal O nly aci
st oper onal
Sun
C 85
86. Introdução
• Prm ii de ncr zação
i tvas si oni são ei par
út s a
resol pr em a excl
vero obl da usão út e
m ua da
si oni
ncr zação pr
de ocessos
> Eviam esper ocupada
t a a
> Provêem ecani o contol da dem
um m sm de r e or
ente i oper
r váras ações dier es ocessos
de f ent pr
• Li
nguagens pr am ação
de ogr suporam
t
dier es i ii de ncr zação
f ent prm tvas si oni
> Sem áf os
or
> M onior
t es
Sun onfdental I er nl
C i i : nt nalO y 86
87. Semáforos
• Propost porD iksta a esol pr em a
o j r par r vero obl da
excl
usão út
m ua
• Um
sem áf o
or possui...
> U m ori eio
val nt r posii que ndi quant
tvo i ca os
processos
podem
acessaro
sem áf o
or
– Val ni aldepende pr
ori ci do opósio sem áf o
t do or
> U m a ia pr
fl de ocessos oqueados esper da
bl a a
lber
i ação sem áf o
do or
– Fia i ci m ent vazi
l é ni al e a
> D uas operações ôm i P( V(
at cas )e )
– M odii o ordo
fca val sem áf o i uilber pr
or e ncl /i a ocessos
na/ fl
da ia Sun onfdental I er nl
C i i : nt nalO y 87
88. Semáforos
• O perações i ii
Prm tvas
> P V
e advêm
dos bos andeses est
ver hol t ar
( ober i em ent ver
pr en)e ncr ar( hoegen)
– P am bém cham ada ow n,W ai Test
t é D tou
– V am bém cham ada p,Si
t é U gnalou ncr ent
I em
P(s): Se s = 0 então
Suspender processo na fila;
s = s – 1;
V(s): s = s +1;
Se fila não vazia então
Liberar um processo da fila;
Sun onfdental I er nl
C i i : nt nalO y 88
89. Semáforos
• O perações i ii
Prm tvas
P(s): Se s = 0 então
Suspender processo na fila;
s = s – 1;
V(s): s = s +1;
Se fila não vazia então
Liberar um processo da fila;
P(s): Se s > 0 então
s = s – 1
senão
Suspender processo na fila;
V(s): Se fila não vazia então
Liberar um processo da fila;
senão
s = s +1
Sun onfdental I er nl
C i i : nt nalO y 89
90. Semáforos
• Ti
pos Sem áf os
de or
> Sem áf o náro
or Bi i
–Val sem áf o i ci m ent 0 1
ordo or é ni al e ou
–U tlzado a esol pr em a excl
ii par r vero obl da usão
m út em
ua sessões íi
crtcas
> Sem áf o ont
or C ador
–Val sem áf o i ci m ent qual
ordo or é ni al e quer
i eio
nt r posii
tvo
–Val epr
orr esent o ot r
a t alde ecursos
com parihados r os ocessos
tl ente pr
–U tlzado a ncr zação pr
ii par si oni de ocessos
Sun onfdental I er nl
C i i : nt nalO y 90
91. Semáforos
• Excl
usão út com
M ua Sem áf o
or
> Sessão íi delm iada
crtca i t porsem áf o náro
or bi i
Variável Global
s: Semáforo Binário;
Begin {RequisitaExclusão}
P(s): Se s = 0 então
P(s);
Suspender processo na fila;
End {RequisitaExclusão}
... s = s - 1
Seção crítica
...
Begin {LiberaExclusão}
V(s);
End {LiberaExclusão}
Sun onfdental I er nl
C i i : nt nalO y 91
92. Semáforos
• Excl
usão út com
M ua Sem áf o
or
> G ar e excl
ant a usão út
m ua
> Processos são ndependent
i es
– N ão t nam execução
aler a das seções íi
crtcas
> Processos não bl
se oquei ut
am m uam ent
e
– N ão r
entam em deadl
ock
> Processos
não
esper ndefni
am i i dam ent
e,
dependendo poltca lber
da íi de i ação fl
da ia
– N ão
acont
ece ar i
st vaton
> Evia esper ocupada
t a a
Sun onfdental I er nl
C i i : nt nalO y 92
93. Semáforos
• Sem áf o
or em Java
I pl ent
m em ado a asse
pel cl Semaphore
public Semaphore(int permits)
public Semaphore(int permits, boolean fair)
C ra i ci i um
i e ni alza sem áf o
or
permits – ori ci sem áf o
val ni aldo or
fair gar e íi de i ação FO (true)
ant poltca lber FI
public void acquire() throws InterruptedException
I pl ent a
m em a operação i ii P
prm tva
public void release()
I pl ent a
m em a operação i ii V
prm tva
Sun onfdental I er nl
C i i : nt nalO y 93
94. Semáforos
• Sem áf o
or em Java
> I pl ent
m em ando
Excl
usão út
M ua
public class MyLock extends Thread {
Semaphore s;
int id;
public MyLock(Semaphore s, int id) {
this.s = s;
this.id = id;
} public static void main (String[] args) {
int nproc = 10;
public void run() {
while (true) {
Semaphore s = new Semaphore(1, true);
try {
for (int p = 0; p < nproc; p++)
s.acquire();
// Sessão crítica (new MyLock(s, p)).start();
s.release(); }
} catch (InterruptedException e) {}
}
}
} Sun onfdental I er nl
C i i : nt nalO y 94
95. Semáforos
• Si oni
ncr zação
com
Sem áf o
or
> Pr em a odut onsum i
obl Pr or C dor
– Produt oduz
orpr dados os oca f
e col em um bufer
– C onsum i em ove dados buferpar usá
dorr os do f a
l
os
Produt
or Bufer
f C onsum i
dor
Produtor C onsum i dor
col
oca r ove
em
dados no dados do
bufer
f bufer
f
Sun onfdental I er nl
C i i : nt nalO y 95
96. Semáforos
• Si oni
ncr zação
com
Sem áf o
or
> Pr em a odut onsum i
obl Pr or C dor
– BuferSi pl /M ensagem ni
f m es Ú ca
Variável Global
s: Semáforo Binário; {inicialmente 0}
... ...
Armazena dados no buffer P(s);
V(s); Remove dados do buffer
... ...
Produt
or C onsum i
dor
Sun onfdental I er nl
C i i : nt nalO y 96
97. Semáforos
• Si oni
ncr zação
com
Sem áf o
or
> Pr em a
obl public class SingleBuffer {
Semaphore s;
Produt onsum i
or C dor String value;
public SingleBuffer() {
– BuferSi pl /
f m es s = new Semaphore(0);
value = null;
M ensagem ni
Ú ca }
public void deposit(String v) {
value = v;
s.release();
}
public String fetch() {
s.acquire();
return value;
}
}
Sun onfdental I er nl
C i i : nt nalO y 97
98. Semáforos
• Si oni
ncr zação
com
Sem áf o
or
> Pr em a odut onsum i
obl Pr or C dor
– BuferSi pl /M ensagem ni
f m es Ú ca
public class Producer extends Thread {
SingleBuffer buffer;
String value;
public Producer(SingleBuffer b, String v) {
buffer = b; public class Consumer extends Thread {
value = v; SingleBuffer buffer;
} String value;
public void run() { public Consumer(SingleBuffer b) {
buffer.deposit(value); buffer = b;
} }
}
public void run() {
value = buffer.fetch();
}
Sun onfdental I er nl
C i i : nt nalO y 98
}
99. Semáforos
• Si oni
ncr zação
com
Sem áf o
or
> Pr em a odut onsum i
obl Pr or C dor
– BuferSi pl /M ensagem ni
f m es Ú ca
public class ProducerConsumer {
public static void main (String[] args) {
String message = “Campus IV”;
SingleBuffer b = new SingleBuffer();
Producer p = new Producer(b, message);
Consumer c = new Consumer(b);
p.start();
c.start();
}
}
Sun onfdental I er nl
C i i : nt nalO y 99
100. Semáforos
• Si oni
ncr zação
com
Sem áf o
or
> Sem áf os ant excl
or gar em a usão út e m iem
m ua per t a
si oni
ncr zação pr
de ocessos
– G ar i depende cor et uso
anta do r o das i ii
prm tvas
– Prm ii podem
i tvas seresqueci
das o ogr adordur e
pel pr am ant a
codii
fcação
– G ar i depende cor et ent
anta do r o endi ent do
m o
r aci
el onam ent ente váras i ii
o r as i prm tvas
– C ódi
gos
das sessões íi são eplcados di
crtcas r i ou spersos
nos
dier es ocessos
f ent pr
– Prm ii são sper
i tvas di sas códi dos ocessos
no go pr
– É eci avalart
pr so i odo códi par ent
o go a endero el onam ent
r aci o
ente prm ii
r as i tvas
Sun onfdental I er nl
C i i : nt nalO y 100
101. Monitores
• M onior
t es
> C onstução
r que
pode
serusada a usão út
par excl m ua
e ncr zação pr
si oni de ocessos
> Propost porD iksta post i m ent i pl ent
o j r e eror e m em ado
porH oar e ansen
e H
> Explcia centalza sessões íi
i t e r i as crtcas a
em um
pare
t especi códi
aldo go
– Excl
usão út é om atcam ent f çada
m ua aut i e or
– Faciia ent
lt o endi ent
m o
> N ão
adot prm ii par dem ar egi
a i tvas a carr ões íi
crtcas
– Evia esqueci ent do
t o m o uso
das i ii
prm tvas
Sun onfdental I er nl
C i i : nt nalO y 101
102. Monitores
• U m oniorpossui...
m t
> N om e
que em pr
t o opósio i
t de dentfcação
ii
> Varávei gl
i s obai que
s são
com parihadas r os
tl ente
processos
que
usam m onior
do t
> Procedi ent de r
m os entada pr
( ocedur enti
e res)que
podem i
seratvados os ocessos
pel pr
– Podem
possui i
rvarávei l s par etos
s ocai e âm r
– U m co ocesso
úni pr poderatvaros ocedi ent do
i pr m os
m onior cada nst e
t ,a i ant
– I põe excl
m a usão út ente ocessos
m ua r pr
– Varávei gl
i s obai som ent podem
s e seracessadas pari
a trdos
procedi ent
m os
> C ódi de ni alzação : Internal O nly i
go i ci iSun C onfidential varávei gl
das s obai
s 102
103. Monitores
monitor: nomemonitor;
declaração de variáveis globais;
procedure operação1(parâmetros);
declaração de variáveis locais;
begin
código que implementa a operação
end;
...
procedure operaçãoN(parâmetros);
declaração de variáveis locais;
begin
código que implementa a operação
end;
begin
código de inicialização das variáveis globais
end
Sun onfdental I er nl
C i i : nt nalO y 103
104. Monitores
• M onior x
t es Sem áf os
or
S
Processo
1 Processo
2 Processo
N
e
Begin Begin Begin
m ... ... ...
á
P(s) P(s) P(s)
f
Sessão crítica 1 Sessão crítica 2 Sessão crítica N
o
V(s) V(s) V(s)
r ... ... ...
o End; End; End;
M
o Begin Begin Begin
n ... ... ...
i oper1(params); oper2(params); operN(params);
t ... ... ...
o End; End; End;
r Sun onfdental I er nl
C i i : nt nalO y 104
105. Monitores
• Podem m pl ent
seri em ados
com o a
um
cl
asse i
em lnguagens i adas obj os
orent a et
– N om e cl
da asse i ânci do et r esent
ou nst a obj o epr a
o nom e m onior
do t
– Ati os epr
rbut r esent varávei gl
am as i s obai
s
com parihadas
tl
– M ét
odos epr
r esent pr
am os ocedi ent de r
m os entada
– C onstut epr
r orr esent o
a códi de ni alzação
go i ci i das
varávei com parihadas
i s tl
Sun onfdental I er nl
C i i : nt nalO y 105
106. Monitores
• M onior em
t es Java
> Todo et Java
obj o possuium oniorassoci
m t ado
> Prm ii synchronized per ie
i tva m t acessaro onior
m t
de et
um obj o
– Prm ii pode
i tva serusada ét
em m odos techos códi
ou r de go
( at ent
st em s)
– Assegur que,em
a um dado nst e,apenas co hr
i ant um úni t ead
pode
execut ét
arm odos obj o
do et
– Thread
possuio oquei (ock)do oniordo et
bl o l m t obj o
– Thread á
est dento m oniordo et
r do t obj o
Sun onfdental I er nl
C i i : nt nalO y 106
107. Monitores
• M onior em
t es Java
> Prm ii synchronized
i tva
– M ét
odos ncr zados
Si oni
– M ét
odos átcos am bém
est i t podem ncr zados
sersi oni
– I ânci e asse
nst as cl possuem onior (ocks)
m t es l
i
ndependentes
– C ada onior( et /cl
m t obj o asse)
,em um dado nst e,
i ant
per ie execução um co hr
m t a de úni t ead
– Trechos C ódi Si oni
de go ncr zados
– Pode ncr ent concor ênci de hr
i em ara r a t eads
– Per ie
m t execução m ulânea di sos ét
si t de ver m odos
Sun onfdental I er nl
C i i : nt nalO y 107
108. Monitores
• M onior em
t es Java
D ados
O
b M étodo Fia pr
l de ocessos do
si oni
ncr zado m oniorda asse
t cl
j M étodo Fia pr
l de ocessos
do
e si oni
ncr zado m oniordo et
t obj o
t
M étodo
não
o si oni
ncr zado C onj o pr
unt de ocessos
M étodo
não sem oquei dos onior
bl o m t es
si oni
ncr zado
Sun onfdental I er nl
C i i : nt nalO y 108
109. Monitores
• M onior em
t es Java
public class SynchClassName {
private String globalVar;
public SynchClassName() {
}
public synchronized void synchMethod() {
String localVar;
}
public void nonSynchMethod() {
}
public static synchronized void synchStaticMethod() {
}
public static void nonSynchStaticMethod() {
}
} Sun onfdental I er nl
C i i : nt nalO y 109
110. Monitores
public class SynchClass {
public synchronized void synchMethod(int i) {
while (true) System.out.println(i);
}
public void nonSynchMethod(int i) {
while (true) System.out.println(i);
}
public static synchronized void synchStaticMethod(int i) {
while (true) System.out.println(i);
}
public static void nonSynchStaticMethod(int i) {
while (true) System.out.println(i);
}
}
Sun onfdental I er nl
C i i : nt nalO y 110
111. Monitores
public class SynchImpl extends Thread {
int id;
SynchClass sc; public SynchImpl(int id, SynchClass sc) {
... this.id = id;
public void run() { this.sc = sc;
switch (id) {
}
case 0:
case 1: sc.synchMethod(id); break;
case 2:
case 3: sc.nonSynchMethod(id); break;
case 4:
case 5: SynchClass.synchStaticMethod(id); break;
case 6:
case 7: SynchClass.nonSynchStaticMethod(id); break;
} public static void main (String[] args) {
} SynchClass sc = new SynchClass();
... for (int i=0; i < 8; i++)
} (new SynchImpl(i, sc)).start();
} Sun onfdental I ernalO nl
C i i : nt y 111
112. Monitores
• M onior em
t es Java
> Trechos códi si oni
de go ncr zados
public class SynchClassName {
private String globalVar;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void nonsyncMethod() { public void nonsyncMethod1() {
String localVar; synchronized (lock1) {
... ...
synchronized (this) { }
... }
}
public void nonsyncMethod2() {
...
synchronized (lock2) {
}
...
}
}
Sun onfdental I er nl
C i i : nt nalO y 112
113. public class SynchClass {
Monitores private Object lock1 = new Object();
private Object lock2 = new Object();
public void synchThisMethod(int i) {
synchronized (this) {
while (true) System.out.println(i);
}
}
public void synchLock1Method(int i) {
synchronized (lock1) {
while (true) System.out.println(i);
}
}
public void synchLock2Method(int i) {
synchronized (lock2) {
while (true) System.out.println(i);
}
}
}
Sun onfdental I er nl
C i i : nt nalO y 113
114. Monitores
public class SynchImpl extends Thread {
int id;
SynchClass sc;
public SynchImpl(int id, SynchClass sc) {
this.id = id;
public static void main (String[] args) {
this.sc = sc;
SynchClass sc = new SynchClass();
}
for (int i=0; i < 6; i++)
public void run() { (new SynchImpl(i, sc)).start();
switch (id) { }
case 0:
case 1: sc.synchThisMethod(id); break;
case 2:
case 3: sc.synchLock1Method(id); break;
case 4:
case 5: sc.synchLock2Method(id); break;
}
}
...
}
Sun onfdental I er nl
C i i : nt nalO y 114
115. Monitores
• Per go D eadl
i de ocks
> D eve t arcui
se om dado a t
par eviardeadl
ock
public class BadSynchClass {
private int value;
public synchronized int get() {
return value;
}
public synchronized void set(int i) {
value = i;
}
public synchronized void swap(BadSynchClass bsc) {
int tmp = get();
set(bsc.get()); public BadSynchClass(int v) {
bsc.set(tmp); value = v;
} }
} Sun onfdental I er nl
C i i : nt nalO y 115
116. Monitores
public class BadSynchImpl extends Thread {
BadSynchClass a, b;
public BadSynchImpl(BadSynchClass a, BadSynchClass b) {
this.a = a;
this.b = b;
}
public void run() {
a.swap(b);
System.out.println(“A: “ + a.get() + “ B: “ + b.get());
}
public static void main (String[] args) {
BadSynchClass a = new BadSynchClass(1);
BadSynchClass b = new BadSynchClass(2);
(new BadSynchImpl(a, b)).start();
(new BadSynchImpl(b, a)).start();
}
} Sun onfdental I er nl
C i i : nt nalO y 116
117. Fonte
• Si oni
ncr zação
com onior
M t
> Pr em a odut onsum i
obl Pr or C dor
– Produt oduz
orpr dados os oca f
e col em um bufer
– C onsum i em ove dados buferpar usá
dorr os do f a
l
os
Produt
or Bufer
f C onsum i
dor
Produtor C onsum i dor
col
oca r ove
em
dados no dados do
bufer
f bufer
f
Sun onfdental I er nl
C i i : nt nalO y 117
118. Monitores
• Pr em a odut onsum i
obl Pr or C dor
– BuferSi pl /M ensagem ni public SingleBuffer() {
f m es Ú ca
value = null;
public class SingleBuffer { empty = true;
String value; }
boolean empty;
...
public synchronized void deposit(String v) {
value = v;
empty = false;
notify();
}
public synchronized String fetch() {
while (empty) wait();
return value;
}
} Sun onfdental I er nl
C i i : nt nalO y 118
119. Monitores
public class Producer extends Thread {
SingleBuffer buffer;
String value;
public Producer(SingleBuffer b, String v) {
buffer = b;
value = v; public class Consumer extends Thread {
} SingleBuffer buffer;
String value;
public void run() {
buffer.deposit(value); public Consumer(SingleBuffer b) {
} buffer = b;
} }
public void run() {
value = buffer.fetch();
}
}
Sun onfdental I er nl
C i i : nt nalO y 119
120. Monitores
public class ProducerConsumer {
public static void main (String[] args) {
String message = args[0];
SingleBuffer b = new SingleBuffer();
Producer p = new Producer(b, message);
Consumer c = new Consumer(b);
p.start();
c.start();
}
}
Sun onfdental I er nl
C i i : nt nalO y 120
121. Agenda – Parte 4 (Sincronização)
1 – Introdução
2 – Semáforos
- Tipos de Semáforo
- Exclusão Mútua com Semáforo
- Semáforo em Java
- Problema Produtor-Consumidor
- Sincronização com Semáforo
3 – Monitores
- Introdução
- Monitores x Semáforos
- Monitores em Java
- Métodos Sincronizados
- Trechos de Código Sincronizado
- Perigo de Deadlock
- Problema Produtor-Consumidor 121
122. Mãos à obra
Sun onfdental I er nl
C i i : nt nalO y 122
123. Fonte
• Sldes pr essorG l
i do of êdson i
Elas
r er e di plna LP2
ef ent à sci i de da
U ni si
ver dade
Feder Par ba,2008
alda aí
Sun onfdental I er nl
C i i : nt nalO y 123
125. Fonte
• Sldes pr essorG l
i do of êdson i
Elas
r er e di plna LP2
ef ent à sci i de da
U ni si
ver dade
Feder Par ba,2008
alda aí
Sun onfdental I er nl
C i i : nt nalO y 125
126. Programação
Concorrente com Java
Elenilson Vieira
Embaixador de Campus da Sun
Universidade Federal da Paraíba
blogs.sun.com/elenilsonvieira
elenilson.vieira@sun.com
126