Upload
mihajlo-jonic
View
215
Download
0
Embed Size (px)
Citation preview
8/19/2019 PJ20-Concurent
1/55
1
JEZICI ZA KONKURENTNOJEZICI ZA KONKURENTNO
PROGRAMIRANJEPROGRAMIRANJE
8/19/2019 PJ20-Concurent
2/55
2
Korutine Korutine
POZIV POTPROGRAMA KORUTINE
8/19/2019 PJ20-Concurent
3/55
3
Korutine u Simuli Korutine u Simulibegin
COMMENT ***Definicija kor!ine "roi#$o%ac&"ro%cer'
class "ro%cer
begin
in!e(er "o%a!ak)
ref &con+er'con)detach )
while !re do
begin
,,(eneri-e e "o%a!ak ,,
.f /0"o%a!ak)
re+e &con')
end
end )
8/19/2019 PJ20-Concurent
4/55
Korutine u Simuli Korutine u Simuli
COMMENT ***Definicija kor!ine korinik
&con+er'
class con+er)
begin
integer $re%no!)
ref &"ro%cer'"ro%)detach )
while !re do
begin
$re%no! /0.f),,kori!i e "roci!ana $re%no! ,,
re+e &"ro%')
end
end)
8/19/2019 PJ20-Concurent
5/55
Korutine u Simuli Korutine u SimuliCOMMENT ***Mo% (a$no( "ro(ra+a
begin
in!e(er .f)
ref &"ro%cer'"ro%1)
ref &con+er'con1) "ro%1 /,new "ro%cer)
con1 /,new con+er)
"ro%14con /,con1)
con14"ro% /,"ro%1)
re+e &"ro%1'
end )
8/19/2019 PJ20-Concurent
6/55
5
U"ra$janje "o6nje (a$ni+ "ro(ra+o+ ko+e e kreira
"o je%an "ri+erak kae producer i kae consumer 4
U (a$no+ "ro(ra+ e nare%.o+ res!e &"ro%1'
"ra$janje "renoi na kor!in "roi#$o7a8a i o% !e
nare%.e "o6inje i+e!ri6no "reno-enje "ra$janja i#+e7
kor!ina producer i consumer 4
O$e %$e kor!ine ko+niciraj "reko ceo.rojne
"ro+enji$e b" 4
9in:roni#acija i#+e% kor!ina "o!i;e e !i+e -!o
"roi#$o7a6 $ek "ije $re%no! "ro+enji$ b" "re
ne(o je korinik 6i!a4
Korutine u Simuli Korutine u Simuli
8/19/2019 PJ20-Concurent
7/55
<
Glavni problemiGlavni problemi
I Me7o.no ikj6i$anje ko% "ri!"a
#aje%ni6ki+ reri+a4
II 9in:roni#acija "rocea= -!o e "o!i;e
ko+nikacijo+4
8/19/2019 PJ20-Concurent
8/55
>
SemaforiSemafori
9e+afori re%!$o #a #a-!i! rera4
#a#e!i &'/if 01 then /0?
else Prekin!i "roce i $r!a!i (a red&')
oo.o%i!i &'/ if re%&' "ra#an then /01else O.no$i!i "roce i# re%&'4
8/19/2019 PJ20-Concurent
9/55
@
SignaliSignali
9i(nai re%!$o #a ko+nikacij i#+e7
"rocea4
"oa!i &e'/ i" re%&e'"ra#an then e /01
else o.no$i!i "r$i "roce i# re%&e')
ceka!i &e'/ i" e 01 then e /0?
else "rekin!i "roce i $r!a!i (a re%&e'4
8/19/2019 PJ20-Concurent
10/55
1?
Pseudo kod procesa Pseudo kod procesa
GENERATOR sa semaforimaGENERATOR sa semaforimaco!!on o"i #aje%nicki: "ro+enji$i: B#ar ./.afer)/e+afor )%efinianje e+afora Bne"n=ne"ra#an /i(na)
end$rogra!
GENERATOR)#ar /"o%a!ak)begindo
(eneria!i &')#a#e!i &')
i" "n thenoo.o%ii!i &'
ceka!i &ne"n')#a#e!i &'end i" )
"ia!i &')oo.o%i!i &') "oa!i &ne"ra#an'
end do
end )
8/19/2019 PJ20-Concurent
11/55
11
Pseudo kod procesa Pseudo kod procesa
KORISNIK sa semaforima KORISNIK sa semaforima$rogra! KORI9NIK)#ar /"o%a!ak)
begin
do
#a#e!i&')i" "ra#an then
oo.o%i!i &')
ceka!i &ne"ra#an')
#a#e!i &'
end i" ) "re#e!i&'
oo.o%i!i &')
"oa!i &ne"n'
end do )
end )
8/19/2019 PJ20-Concurent
12/55
12
Semafori u oduliSemafori u oduli
!PRO"#$ER%!PRO"#$ER%
se!a$hore "ri!"= ne"ra#an= ne"n)
$rocess "ro%cer)
loo$
,,(eneri-e e VREDNO9T ,,ai! &ne"n') ceka e na +e!o B
ai! &"ri!"') ceka e na "ri!" B
ENTER&VREDNO9T')
en% &"ri!"')
en% &ne"ra#an')
end oo")
end "ro%cer)
8/19/2019 PJ20-Concurent
13/55
13
Semafori u oduliSemafori u oduli
!$ONS#ER%!$ONS#ER%
$rocess con+er)
loo$
ai! &ne"ra#an') ceka e ne"ra#an .aferB
ai! &"ri!"') ceka e "ri!" B
REMOVE&VREDNO9T')
en% &"ri!"')
en% &ne"n',,kori!i e "roci!ana VREDNO9T ,,
end loo$
end con+er)
8/19/2019 PJ20-Concurent
14/55
1
onitori onitori
Moni!or je "o !rk!ri +o% koji o.je%injje "o%a!ke koji
"re%!a$jaj #aje%ni6ki rer #a $i-e "rocea a
"roce%ra+a &fnkcija+a' koji+a e reai#je "ri!" !i+
"o%aci+a4
Ako e neki o% ak!i$irani: "rocea o.ra!i +oni!or
!ren!k ka%a neki %r(i "roce kori!i "roce%re +oni!oranje+ e ne %o#$oja$a "ri!" "o%aci+a +oni!ora $e8 e
"reki%a i $r!a$a re% 6ekanja "ri%r#en +oni!or4
U$ek ka%a je%an "roce na"-!a +oni!or "ro$era$a e re%
6ekanja i koiko nje+ i+a "rocea koji 6ekaj= "r$i o%nji: e ak!i$ira i %o#$oja$a + e "ri!" "o%aci+a4
Na !aj na6in "o!i;e e +e7o.no ikj6j8i "ri!"
#aje%ni6ki+ "o%aci+a $i-e "rocea4
8/19/2019 PJ20-Concurent
15/55
1
Procesi i monitori u oduli Procesi i monitori u oduli
t%$e i+e"rocea 0$rocess &for+ani "ara+e!ri')
,,okani o"ii ,,
,,!eo "rocea ,,
end )
t%$e i+e+oni!ora 0+oni!or&for+ani "ara+e!ri')
,,o"ii %eji$i: "ro+enji$i: ,,
,,o"ii okani: "roce%ra ,,,,o"ii "roce%ra #a in!erfej &e"or!e% "roc4',,
,,ko% #a inicijai#acij ,,
end )
8/19/2019 PJ20-Concurent
16/55
15
"el&iv bafer preko monitora "el&iv bafer preko monitora
odula ' odula 't%$e %a!a.f 0+oni!or)
const .feri#e 01??)
#ar
.f /arra% F1 44.fi#e o" in!e(er)
ne!in= ne!o! / 1 44 .feri#e)
fie% / ? 44 .feri#e)
en%erH= recei$erH/ Hee)
$rocedre entr% iner! &i!e+ /in!e(er')
begin
i" fie% 0 .feri#e
then dela% &en%erH')
.f Fne!in //0 i!e+)
ne!in /0 &ne!in +o% .feri#e' 1)
fie% /0 fie% 1)
contine &recei$erH'
end )
8/19/2019 PJ20-Concurent
17/55
1<
"el&iv bafer preko monitora "el&iv bafer preko monitora
odula ' odula '$rocedre entr% re+o$e ar i!e+ /in!e(er')begin
i" fie% 0 ?
then dela% &recei$erH')
i!e+ /0 .f Fne!o! )ne!o! /0 &ne!o! !od .fi#e' 1)
fie% /0 fie% , 1)
contine &en%erH'
end )
,,ko% #a inicijai#acij +oni!ora ,,begin
fie% /0 ?)ne!in /0 1)ne!o! /0 1)
end )
8/19/2019 PJ20-Concurent
18/55
1>
Opis procesaOpis procesat%$e "ro%cer 0$rocess &.ffer / %a!a.f')
#ar PODATAK /integer )begin
c%cle
,,(eneri-e e PODATAK ,,
.ffer4iner! &PODATAK')
endend )
t%$e con+er 0$rocess &.ffer /%a!a.f')
#ar ZAPI9ANIPODATAK /in!e(er)
begin
c%cle
.ffer4re+o$e &ZAPI9ANIPODATAK')
,,kori!i e ZAPI9ANIPODATAK ,,
end
end )
8/19/2019 PJ20-Concurent
19/55
1@
Glavni progrmGlavni progrm#ar
ne"ro%cer / "ro%cer)
necon+er / con+er)
ne.affer / %a!a.f)begin
init ne.ffer)
ini! ne"ro%cer &ne.ffer')
ini! necon+er &ne.ffer')
end
8/19/2019 PJ20-Concurent
20/55
2?
Randevu Randevu
Ran%e$ je konce"! in:rone i+e!ri6ne ko+nikacije4$rocess A)
#ar / "o%a!ak)
begin
J) ,,Proce J e -aje "o%a!ak
end )
$rocess J)
#ar L/ "o%a!ak)begin
AL) ,,Za:!e$a e o% "rocea A "o%a!ak L
end )
8/19/2019 PJ20-Concurent
21/55
21
essage(Passing !Ada% essage(Passing !Ada%
tas& TA9KPRIMER is
entr% UAZ1 &ITEM /in INTEGER')
entr% UAZ2 &ITEM /ot INTEGER')
end TA9KPRIMER)
tas& t%$e ZADACI is
entr% UAZ1 &ITEM /in INTEGER')
entr% UAZ2 &ITEM /ot INTEGER')
end ZADACI )
ZADATAK1/ ZADACI)
ZADATAK2/ ZADACI)
ZADD / arra% &1441?' o" ZADACI)
8/19/2019 PJ20-Concurent
22/55
22
Telo )adatka !Task *od+%Telo )adatka !Task *od+%tas& bod% ZADACI is
loo$
select
acce$t UAZ1 do
,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ1
end UAZ1)or
acce$t UAZ2 do
,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ2
end UAZ2)end select )
end loo$ )
end ZADACI)
8/19/2019 PJ20-Concurent
23/55
23
Randev u
Prvo se &avl&a entr+ naredba Prvo se &avl&a entr+ naredba
I#$r-a$a e ain:rono
I#$r-a$a e
ain:rono
I#$r-a$a e ain:rono
I#$r-a$a e ain:rono
I#$r-a$a e
9"en%o$an
Acceptnaredba
Entry call
Client
Server
Vreme
9"en%o$an
8/19/2019 PJ20-Concurent
24/55
2
Randev u
Prvo se &avl&a accept naredba Prvo se &avl&a accept naredba
I#$r-a$a eain:rono
I#$r-a$a e ain:rono
I#$r-a$a e ain:rono
I#$r-a$a e ain:rono
I#$r-a$a e9"en%o$an
9"en%o$an
Acceptnaredba
Entry call
Vreme
Client
Server
8/19/2019 PJ20-Concurent
25/55
2
select select ( sa else granom( sa else granom
select
acce$t UAZ1 do
,,
end UAZ1)
or,,Jio koji .roj %r(i: #a%a!aka
else
,,Ua# koji e i#$r-a$a $ek ka%a ne+a
,,#a:!e$a #a (ore na$e%eni+ a#i+aend select )
8/19/2019 PJ20-Concurent
26/55
25
uslovniuslovni select select
select
when $re% 1?? 0
acce$t UAZ1 do
,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ1
end UAZ1)or
when $re% 2?? 0
acce$t UAZ2 do
,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ2
end UAZ2)
end select;
8/19/2019 PJ20-Concurent
27/55
2<
select sa delayselect sa delay
Ako ne+a #a:!e$a #a a#i+a o.:$a8eni+ select kon!rkcijo+ i ako $re+enko+ "erio% na#na6eno+
nare%.i dela% ne %o7e %o "o#i$a neko( o% a#a on%a e
i#$r-a$a a# koji e%i i#a dela% nare%.e4
selectacce$t UAZ1 do
,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ1
end UAZ1)
or
acce$t UAZ2 do,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ2
UAZ2)
or dela% 4?)
,,"roce%ra koja e i#$r-a$a "oe cekanja
end select )
8/19/2019 PJ20-Concurent
28/55
2>
select sa terminateselect sa terminate
Nare%.o+ ter!inate e "o!i;e #a$r-a$anje #a%a!ka 6ajka%a ne+a "o#i$a a#a #a%a!ak4
select
acce$t UAZ1 do
,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ1end UAZ1)
or
acce$t UAZ2 do
,,ko% koji e i#$r-a$a ka%a e "o#o$e UAZ2
end UAZ2)
or
ter!inate )
,,#a$r-i!i "oao
end select )
l b f k k
8/19/2019 PJ20-Concurent
29/55
2@
"el&iv bafer preko taskova "el&iv bafer preko taskova
!Ada%!Ada%$rocedre PRODUCER_CUNSOMER is--Defnicija globalnih tipova podataa;t%$e !"PPOD isrecord
--Opi# #tr$t$re podataaend record ;
--Opi#i %adataatas& &adata_'a(era is
entr% Upi#ati )*+in !ipPod,;entr% Procitati )*+ot !ippod,;
end &adata_'a(era;tas& PRODUCER;tas& CONSUMER;begin
''
end PRODUCER_CONSUMER;
8/19/2019 PJ20-Concurent
30/55
3?
task bodytask body zadatak_Bafer zadatak_Bafer
se$arate )PRODUCER_CONSUMER,;tas& bod% %adata_'a(er is--Dien%ije ba(era;D"M'./+ const "N!E0ER +1 23;'a(er + arra% )4 55Diba(, o" !ipPod;sbt%$e 'a(_ind is "N!E0ER range 4 55 Diba(;
Ul6"%l +'a(_ind +14;sbt%$e 'roj_Slob is "N!E0ER range 3 55Diba(;&a$%eto+'roj_Slob +1Diba(;
begin
loo$
select
when &a$%eto 7 Diba( 18--Stop ada je 'a(er p$n;
acce$t Upi#ati )*+ in !ipPod, do--Upi# novog podata $ ba(er'a(er)Ul,+1 *;
end Upi#ati;
8/19/2019 PJ20-Concurent
31/55
31
task bodytask body zadatak_Bafer zadatak_Bafer
--Menja #e vredno#t brojaca;Ul +1 Ul !od Diba( 94;&a$%eto +1 &a$%eto 94;
or
when &a$%eto 8 3 18acce$t Procitati )*+ ot !ipPod, do
*+1 'a(er )"%l,;end Procitati;
"%l +1 "%l !od Diba( 94;&a$%eto +1 &a$%eto -4;
end select ;end loo$ ;end &adata_'a(era;
8/19/2019 PJ20-Concurent
32/55
32
task bodytask body PRODUCERPRODUCER
se$arate )PRODUCER_CONSUMER,;tas& bod% PRODUCER is
--:oalni potprograi %adata;"nction 0eneri#ati )555, retrn !ipPod is
--:oalni opi#i proced$re;begin--od oji #e generi
8/19/2019 PJ20-Concurent
33/55
33
task bodytask body CONSUMERCONSUMER
se$arate )PRODUCER_CONSUMER,;
tas& bod% CONSUMER is
Po+ !ipPod;
--:oalni potprograi %adata;
$rocedre Upotrebiti is
--:oalne defnicije proced$re;
begin
--od proced$re;
end Upotrebiti;
begin
loo$
--Pre$%ianje podata i% ba(era;
&adata_'a(era5Procitati )Po,;
Upotrebiti;
end loo$ ;
end CONSUMER;
8/19/2019 PJ20-Concurent
34/55
3
Dva tipa niti Dva tipa niti
U a$i +o( e kreira!i ni!i &!:rea%' na $i-e na6ina4
Naje%no%!a$niji na6in je %a e #+e "o!oje8a kaa i !a$i ni!4
To e "o!i;e !ako -!o e kaa +o%ifikje !ako %a i+"e+en!ira
in!erfej Rna.e koji a%r;i +e!o% rn&' koji #a:!e$aj $i !i"o$ini!i4 &rn &' +e!o% a%r;i ko% koji e i#$r-a$a o% !rane ni!i'4
Dr(i na6in %a e kreira ni! je %a e kreira "o!"no o%$ojena kaa
koja e i#$o%i i# kae T:rea%4
Kako kaa Trea% a+a #a e.e i+"e+en!ira Rna.e in!erfej ona$e8 a%r;i +e!o% rn&'4 Me7!i+= +e!o% rn kae Trea% ne ra%i
ni-!a i o.i6no (a !re.a "re%efinia!i %a .i + e %aa neka
fnkcionano! i %efiniaa ni! kak$ ;ei+o4
8/19/2019 PJ20-Concurent
35/55
3
Konvertovanje klase u nit Konvertovanje klase u nit
14 Definia!i #a(a$j kae %a i+"en+en!ira
Rnna.e in!erfej4
24 I+"e+en!ira!i rn&' +e!o%4
34 Do%a!i o.jeka! T:rea% kao "o%a!ak kae44 Inicijai#ira!i T:rea% o.jeka! i "o#$a!i nje(o$ !ar!&'
+e!o%4
4 Po#$a!i !o"&' +e!o% ni!i &o.jek!a Trea%' %a .i e
"rekina ni!4
8/19/2019 PJ20-Concurent
36/55
35
1. korak 1. korak
Na "ri+er= ako je kaa MLA""e! %efiniana !ako %a
nae7je ka A""e! a/
".ic ca MLA""e! e!en% A""e!
!re.a i#+en!i o$ %efinicij !ako %a kaa i+"e+en!ira i
in!erfej Rnna.e/
".ic ca MLA""e! e!en% A""e! i+"e+en!
Rnna.e
".ic $oi% rn&'
B
8/19/2019 PJ20-Concurent
37/55
3<
2.2. korak korak :: Opis Thread objektaOpis Thread objekta
9e%e8i korak %a e kao "o%a!ak kae %efini-e o.jeka!
kae T:rea%4 N"r4 a/
T:rea% !:rea%)
O$aj o.jeka! 8e o+o(8i!i %a e "reko nje(a %oe(n+e!o%i kae T:rea%4
8/19/2019 PJ20-Concurent
38/55
3>
,(-,(- . step: . step: Kreiranje i startovanje Kreiranje i startovanje
Tread objektaTread objekta
9e%e8i korak je %a e inicijai#je i "okrene ni!4 I+aj8i $i% %ae ra%i o kai koja !re.a %a .%e a"e! o$a inicijai#acija .i8e
i#$r-ena !ar! +e!o% kae a"e!a= kao e%e8o+ "ri+er/
".ic $oi% !ar!&'
!:rea% 0 ne T:rea%&!:i')
!:rea%4!ar!&')
B
Uo6i+o %a e ni! inicijai#je "o#i$o+ kon!rk!ora kae T:rea%6iji je je%ini ar(+en! !:i koji+ e referencira na a+ a"e!4 To
je +e:ani#a+ koji a$a kori!i %a .i o%re%ia kojoj kai e
%o%ejje ni!4 O%+a: "oe inicijai#acije o.jek!a "o#i$a e !ar!
+e!o% kae T:rea% koji+ e !ar!je i#$r-a$anje ni!i4 Ka%a ni!
krene a$a "o#i$a rn +e!o% ko+e je fnkcionano! ni!i
8/19/2019 PJ20-Concurent
39/55
3@
5. step:5. step: Zaustavljanje niti Zaustavljanje niti
Ni! e #a$r-a$a ka%a e #a$-i ko% ok$ir rn +e!o%a4
Me7!i+= 6e!o e ja$ja "o!re.a %a e ni! #a!a$i "re njeno(
#a$r-e!ka4 N"r4 ka%a ;ei+o %a na"-!i+o !ranic kojoj e
i#$r-a$a neka ani+acija "re ne(o e ona #a$r-i4Kako a$a "o#i$a !o" &' +e!o% $ek ka%a korinik na"-!a
!ranic na kojoj e a"e! i#$r-a$a= o$aj +e!o% je %o.ro +e!o %a
e nje+ "o#o$e +e!o% #a #a!a$janje ni!i/
".ic $oi% !o"&'
!:rea%4!o"&')
B
8/19/2019 PJ20-Concurent
40/55
?
rimer: Kori rimer: Kori !" !" enje niti u apletuenje niti u apletu
i+"or! ja$a4a!4*)i+"or! ja$a4a""e!4*)
".ic ca T:rea%A""e! e!en% A""e!
i+"e+en! Rnna.e
T:rea% !:rea%)
in! con!) 9!rin( %i"aL9!r)
Qon! fon!)
".ic $oi% !ar!&'
fon! 0 ne Qon!&Ti+eRo+an= Qon!4PAIN=
8/19/2019 PJ20-Concurent
41/55
1
rimer: Kori rimer: Kori !" !" enje niti u apletuenje niti u apletu
".ic $oi% !o"&'
!:rea%4!o"&')
B
".ic $oi% rn&'
:ie &con! S 1???'
con!) %i"aL9!r 0 9!rin(4$aeOf&con!')
re"ain!&')
!rL !:rea%4ee"&1??') B
ca!c: &In!err"!e%Ece"!ion e' B
B
B
".ic $oi% "ain!&Gra":ic ('
(4%ra9!rin(&%i"aL9!r= ?= 13?')
B
B
8/19/2019 PJ20-Concurent
42/55
2
rimer: Kori rimer: Kori !" !" enje niti u apletuenje niti u apletu
A"e! kori!i a! "akr!4
A"e! kori!i kae i# a""e! "ake!a4
I#$o%i+o T:rea%A""e! i# kae A""e! i i+"e+en!ira+oRnna.e in!erfej4
o"ij e "o%aci kae +e7 koji+a i T:rea% o.jeka!4
Pre%efini-e+o !ar!&' +e!:o%4
Kreira+o i "o!a$ja+o fon! a"e!a
Inicijai#j e "o%aci4Kreira e i !ar!je e !ar!&' +e!o%4
Pre%efini-e e !o"&' +e!o%4
8/19/2019 PJ20-Concurent
43/55
3
rimer: Kori rimer: Kori !" !" enje niti u apletuenje niti u apletu
Za!a$janje ni!i4 4
In"e+en!ira e rn&' +e!o%
Pe!ja koja e "ona$ja 1??? "!a4
Iinkre+en!ira e .roja64
Kreira e i "rika#je ni# o% $re%no!i .roja6a4
a$a "ono$o ic!r!a$a a"e!4
Ni! e "en%je #a 1?? +4 Pre%efini-e e "ain!&' +e!o%4
Icr!a$a e !rin(4
8/19/2019 PJ20-Concurent
44/55
#$vo #$vo% % enje klase nasleenje klase nasle% % ivanjemivanjem
klase Thread klase Thread
Pre!"o!a$i+o %a :o8e+o %a na"i-e+o i!i
a"e! kao "re!:o%no+ "ri+er ai %a:o8e+o %a i#%$oi+o ni! koja 8ekon!roia!i .roja64
Na"ra$i8e+o no$ ka #a o$ ni!4
8/19/2019 PJ20-Concurent
45/55
&yThread.java: klasa i$vedena i$ &yThread.java: klasa i$vedena i$klase Thread klase Thread
".ic ca MLT:rea% e!en% T:rea%
T:rea%A""e!2 a""e!)in! con!)
MLT:rea%&T:rea%A""e!2 a""e!'
!:i4a""e! 0 a""e!)B
".ic $oi% rn&'
8/19/2019 PJ20-Concurent
46/55
5
&yThread.java: klasa i$vedena i$ &yThread.java: klasa i$vedena i$klase Thread klase Thread
con! 0 ?)
:ie &con! S 1???'
con!)
a""e!4%i"aL9!r 0 9!rin(4$aeOf&con!')
a""e!4re"ain!&')
!rL ee"&1??') B
ca!c: &In!err"!e%Ece"!ion e' B
BB
B
& Th d j kl i d i&yThread java: klasa i$vedena i$
8/19/2019 PJ20-Concurent
47/55
<
&yThread.java: klasa i$vedena i$ &yThread.java: klasa i$vedena i$klase Thread klase Thread
Ka MLT:rea% i#$o%i+o o% kae T:rea%4
Defini-e+o "o%a!ke kae kj6j8i i T:rea% o.jeka!4
Defini-e+o kon!rk!or kae4
Prenoi e ar(+en! kon!rk!ora4
Pre%efini-e e rn&' +e!o%
Pe!ja koja e "ona$ja 1?? "!a
Inkre+en!ira e .roja6
O% .roja6a e kreira i "rika#je !rin(4
a$a "ono$o icr!a$a a"e!4
Ni! e "en%je 1?? +4
8/19/2019 PJ20-Concurent
48/55
>
Sin.roni)aci&a nitiSin.roni)aci&a niti
Jok #a in:roni#acij/
9Lnc:roni#e% &o.j'
o.j je %ejeni o.jeka!
i+a+o ekk#i$no "ra$o "ri!"a nje+
n!ar o$o( .oka
B
8/19/2019 PJ20-Concurent
49/55
@
Sin.roni)aci&a nitiSin.roni)aci&a niti
9in:roni#o$ane +e!o%e/
".ic Lnc:roni#e% $oi% I+e+e!o%a & ' 4B
Wai! &nae7je e i# kae O.jec!' oo.a7a #a#e!i o.jeka! i .okirai#$r-a$anje ni!i $e %ok neka %r(a ni! ne "o#o$e +e!o% no!ifL na%i!i+ o.jek!o+4
No!ifL &nae7je e i#kae O.jec!' o.a$e-!a$a ni! koja je :ronoo-ki "r$a "o#$aa +e!o% ai! %a +o;e %a na!a$i a ra%o+4
no!ifLA o.a$e-!a$a $e ni!i koje 6ekaj %a +o( %a na!a$e a ra%o+4
O$e !ri +e!o%e +o( .i!i "o#$ane a+o n!ar Lnc:roni#e% .oka i na%
o..jek!o+ na% koji+ e $r-i in:roni#acija4
8/19/2019 PJ20-Concurent
50/55
?
$onsumer/&ava$onsumer/&ava
".ic ca Con+er e!en% T:rea%
".ic Con+er &Jffer .ffer= in! con!'
!:i4.ffer 0 .ffer)
!:i4con! 0 con!)B
".ic $oi% rn & '
for &in! i 0 ?) i S con!) i'
.ffer4rea%& ')
B "ri$a!e Jffer .ffer)
"ri$a!e in! con!)
B
8/19/2019 PJ20-Concurent
51/55
1
Producer/&ava Producer/&ava
".ic ca Pro%cer e!en% T:rea%
".ic Pro%cer &Jffer .ffer= in! con!'
!:i4.ffer 0 .ffer)
!:i4con! 0 con!)B
".ic $oi% rn & '
for &in! i 0 ?) i S con!) i'
.ffer4ri!e&&in!'Ma!:4ron%&Ma!:4ran%o+& ' * 1??' ')
B "ri$a!e Jffer .fer)
"ri$a!e in! con!)
B
8/19/2019 PJ20-Concurent
52/55
2
*uffer/&ava *uffer/&ava
".ic ca Jffer
".ic Jffer &in! i#e'
!:i4i#e 0 i#e)
%a!a 0 ne in! Fi#e)
rea%Po 0 ?)
ri!ePo 0 ?)
B
P.ic Lnc:roni#e% $oi% ri!e &in! $ae'
if &iQ& ''
9L!e+4o!4"rin!n&XWai!in( !o ri!eY')
!rL ai! & ') B
Ca!c: &Ece"!ion e ' e4"rin!9!ackTrace & ') B
B%a!aFri!ePo 0 $ae)
if &ri!ePo 00 i#e'
ri!ePo0?)
no!ifL&')
9L!e+4o!4"rin!n&XWri!!en/ X$ae')
B
8/19/2019 PJ20-Concurent
53/55
3
*uffer/&ava *uffer/&ava
".ic Lnc:roni#e% in! rea% & '
if &iE+"!L & ''
9L!e+4o!4"rin!n&XWain!in( !o rea% Y') B
!rL ai! & ') B
ca!c: &Ece"!ion e' e4"rin!9!ackTrace &') BB
In! re!Va 0 %a!aFrea%Po)
if &rea%Po 0 0i#e'
rea%Po 0 ?)
9L!e+4o!4"rin!n&XRea%/ Xre!Va')no!ifL & ')
Re!rn re!Va)
B
8/19/2019 PJ20-Concurent
54/55
*uffer/&ava *uffer/&ava
".ic Lnc:roni#e% .ooean iE+"!L & '
re!rn rea%Po 00 ri!ePo)
B
".ic Lnc:roni#e% .ooean iQ & ' Re!rn rea%Po 00 &ri!ePo1' i#e)
B
** Po%aci kae *
"ri$a!e in! i#e)
"ri$a!e in!F %a!a) "ri$a!e in! rea%Po)
"ri$a!e in! ri!ePo)
B
8/19/2019 PJ20-Concurent
55/55
Test Test /&ava/&ava
P.ic ca Te!
".ic !a!ic fina in! JUQQER9IZE 0 1??)
".ic !a!ic fina in! PRODUCECOUNT 0 1??)
P.ic !a!ic $oi% +ain &9!rin(F ar('
Jffer .ffer 0 ne Jffer &JUQQER9IZE')
Pro%cer " 0 ne Pro%cer &.ffer= PRODUCERCOUNT')
Con+er c 0 ne Con+er &.ffer= PRODUCERCOUNT')
"49!ar! & ')
c49!ar! & ')
B
B