PJ20-Concurent

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