12_visenitno programiranje u javi
TRANSCRIPT
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 1/24
Visoka tehni Visoka tehniččkaka šškola Nikola Nišš
Internet programiranjeInternet programiranje
(12)(12)
ViViššenitno programiranje u Javienitno programiranje u Javi
dr Zoran Velidr Zoran Veliččkovikovićć, dipl. in, dipl. inžž. el.. el.
Decembar, 2012.Decembar, 2012.
Studijski program:Studijski program:
Savremene raSavremene raččunarske tehnologijeunarske tehnologije
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 2/24
Vi Viššenitno programiranje (1)enitno programiranje (1) Java ima ugrađene mehanizmeugrađene mehanizme za istovremenoistovremeno izvršavanje
vivišše delovae delova programa.
Ovi delovi programadelovi programa nazivaju se nitiniti (engl. thread).
ViViššenitni radenitni rad je specijalni slučaj viviššeprogramskogeprogramskog (engl.
multitasking) rada.
U viviššeprogramskomeprogramskom radu upravljanje izvršavanjem obavlja
operativni sistemoperativni sistem.
Kod viviššenitnog radaenitnog rada upravljanje izvršavanja obavlja samsam
programski jezik jezik JavaJava.
Koje su razlikerazlike između multitaskingamultitaskinga i rada sa viviššee
programskih nitiprogramskih niti?
Da li su Vam poznate programerskeprogramerske tehnike: poolingpooling i eventevent
loop?
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 3/24
Vi Viššenitno programiranje (2)enitno programiranje (2)Čitanjebloka 1
ČČitanjeitanjebloka 1bloka 1
Jedna nitJedna nit
ViVišše nitie niti
nit 1nit 1 nit 2nit 2 nit 3nit 3
Vreme
nitnit
Računanje1
RaRaččunanjeunanje11
Upis1
UpisUpis11
Čitanjebloka 2
ČČitanjeitanjebloka 2bloka 2
Računanje2
RaRaččunanjeunanje22
Upis2
UpisUpis22
Čitanjebloka 1
ČČitanjeitanjebloka 1bloka 1
Računanje1
RaRaččunanjeunanje11
Upis1
UpisUpis11
Čitanje
bloka 2
ČČitanjeitanjebloka 2bloka 2
Računanje
2
RaRaččunanjeunanje22
Upis
2
UpisUpis22
Čitanjebloka 3
ČČitanjeitanjebloka 3bloka 3
Računanje3
RaRaččunanjeunanje33
Upis3
UpisUpis33
Vreme
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 4/24
Vi Viššenitno programiranje (3)enitno programiranje (3) Programska nitnit može biti u stanju:
izvrizvrššavanjaavanja,
spremnosti za izvrspremnosti za izvrššenjeenje (odmah po dodeli proces. vrem.),
suspenzijesuspenzije (aktivnost niti privremeno prekinuta),
nastavak radanastavak rada (suspendovana nit nastavlja sa izvrš.),
blokadeblokade (čeka pristup resursu). Svakoj programskoj niti se pridrupridružžujeuje određeni prioritetprioritet (u
formi celog broja koji odeđuje relativnirelativni raspored izvršavanja).
Nit može dobrovoljnodobrovoljno da preda kontrolupreda kontrolu ili kontrolu može dapreuzmepreuzme nit višeg prioriteta.
Kod niti sa istimistim prioritetom operativni sistemoperativni sistem (OSOS) treba da
reši problem prvenstvaprvenstva izvrizvrššavanjaavanja! Ovo je izvorizvor problemaproblema pri prenosu Java programa na druge
OSOS.
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 5/24
Vi Viššenitno programiranje (4)enitno programiranje (4) Zboz asinhrone prirodeasinhrone prirode niti je neophodno međusobno
sinhronizovatisinhronizovati monitorom i slanjem predefinisanihpredefinisanih poruka.
Osnova rada sa nitima su klasaklasa ThreadThread i interfejsinterfejs RunnableRunnable.
Klasa ThreadThread kapsulira nit koja se izvršava.
Klasa ThreadThread obezbeđuje vivišše metodae metoda za rad sa nitima:
MetodaMetoda ZnaZnaččenjeenje
get/setName()get/setName() VraVraćća/postavlja ime nitia/postavlja ime niti
get/setPriority()get/setPriority() VraVraćća/postavlja prioritet nitia/postavlja prioritet nitiisAlive()isAlive() Utvrđuje da li se nit izvrUtvrđuje da li se nit izvrššavaava
join() join() ČČeka da se nit zavreka da se nit završšii
run()run() Ulazna taUlazna taččka u nitka u nit
sleep()sleep() Privremeno zaustavljanje niti (suspenzija)Privremeno zaustavljanje niti (suspenzija)start()start() ZapoZapoččinje izvrinje izvrššavanja niti metodom runavanja niti metodom run
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 6/24
Glavna programaska nitGlavna programaska nit Glavna programska nitGlavna programska nit se automatski stvara pokretanjempokretanjem
programaprograma i njome se upravljaupravlja preko objekta ThreadThread.
Iz glavneglavne programske niti se startujuse startuju svesve drugedruge niti i iz njese vrši ččiiššććenjeenje radnog okruženja.
Radi upravljanjaupravljanja glavnomglavnom programskom niti potrebna je
njena referencareferenca koja se se dobija pozivom statistatiččke metodeke metodecurrentThread()currentThread() iz klase ThreadThread.
Metoda currentThread()currentThread() vraća referencureferencu na nit u kojoj je
pozvana.
Kada se dobije referencadobije referenca na glavnu programsku nitglavnu programsku nit, njome
se upravlja kao i svakom drugomdrugom niti.
Pogledajmo opšti oblik metode sleep()sleep():
staticstatic voidvoid sleep(sleep(longlong milisekunde)milisekunde) throwsthrows InterruptedExceptionInterruptedException
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 7/24
Primer: Glavana programaska nitPrimer: Glavana programaska nitclassclass CurrentThreadDemo {CurrentThreadDemo {
publicpublic staticstatic voidvoid mainmain(String args[])(String args[]) { {
ThreadThread tt == ThreadThread.currentThread();.currentThread();System.out.println(System.out.println(““TekuTekućća nita nit: " + t);: " + t);
tt.setName("M.setName("Moja Nitoja Nit");");System.System.outout.println(.println(““Posle promene imenaPosle promene imena: " +: " + tt););
trytry { {
for(int n = 5; n > 0; nfor(int n = 5; n > 0; n----)) { {
System.System.outout.println(n);.println(n);
ThreadThread.sleep(1000);.sleep(1000);
} }
} } catchcatch (InterruptedException e)(InterruptedException e) { {System.System.outout.println("Main thread interrupted");.println("Main thread interrupted");
} } } } } }
Dobijanje reference na naDobijanje reference na naglavnuglavnu programsku nitprogramsku nit
Promena imena niti saPromena imena niti sa setName()setName()
For pelja: Printa od 5 do 1, saFor pelja: Printa od 5 do 1, sa1sec. zadr1sec. zadržžavanjaavanja
Izuzetak koji moIzuzetak koji možže dae da
baci metodabaci metoda sleep()sleep()ako druga nit prekineovu suspendovanu nit
Pauza obezb. metodomPauza obezb. metodom sleep()sleep()
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 8/24
Upotreba argumenta tt uu println()println() naredbi.naredbi.
Izlaz:
Tekuća nit: Thread[main,5,main]Posle promene imena: Thread[Moja Nit,5,main]
Grupa nitiGrupa niti je struktura podataka koja upravlja stanjem skupaniti kao celinomkao celinom.
Nit se može napraviti obrazovanjem instanceinstance objekta tipa
ThreadThread.
Primer: Glavana programaska nitPrimer: Glavana programaska nit
ImeIme
grupegrupe nitiniti
Promena imenaPromena imena
glavne nitiglavne niti
Podrazumevano imePodrazumevano ime
glavne nitiglavne niti - - mainmain
PrioritetPrioritet
nitiniti
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 9/24
Pravljenje niti (1)Pravljenje niti (1) Nit se može napraviti na dva načina:
Realizacijom interfejsainterfejsa RunnableRunnable
Proširenjem klaseklase ThreadThread
Kada klasa realizuje interfejsinterfejs RunnableRunnable potrebno je da poseduje
merodu run()run() unutar koje se definiše programskiprogramski kodkod koji
predstavlja novunovu nitnit.
Deklaracija metode runrun je sledeća:
publicpublic voidvoid run()run()
Metoda run()run() može da poziva druge metode, koristi druge klase i
da deklariše promenljive isto kao i glavna nitglavna nit.
Metoda run()run() zapravo predstavlja ulaznu taulaznu taččkuku za drugudruguuporednu nituporednu nit izvršavanja.
Nit se zavrNit se završšavaava kada se završi metoda runrun .
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 10/24
Pravljenje niti (2)Pravljenje niti (2)ProgramProgram
main(){// kreiranje niti1// startovanje nit1
// kreiranje niti2
// startovanje nit2
// kreiranje niti3// startovanje nit3
}
main(){// kreiranje niti1// startovanje nit1
// kreiranje niti2
// startovanje nit2
// kreiranje niti3// startovanje nit3 }
Nit 1Nit 1run(){
// Kod niti 1
}
run(){
// Kod niti 1
}Nit 2Nit 2run(){
// Kod niti 2
}
run(){
// Kod niti 2
}
Nit 3Nit 3run(){
// Kod niti 3
}
run(){
// Kod niti 3
}
SveSve ččetirietiri niti se moguniti se moguizvrizvrššavati konkurentnoavati konkurentno
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 11/24
Raspoređ ivanje nitiRaspore
đ ivanje niti
Vreme
nit 1 nit 3nit 2 nit 4
nit 1
nit 2
nit 2
nit 1
nit 4
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 12/24
Pravljenje niti (3)Pravljenje niti (3) Prvo se formira klasaklasa ThreadThread koja realizujerealizuje interfejsinterfejs
RunnableRunnable,, a potom se kreira instanca objekta tipa ThreadThread.
Jedan od konstruktorakonstruktora klase ThreadThread je:
ThreadThread(Runnable(Runnable objekatnitobjekatnit, String, String imenitiimeniti))
Za start izvrstart izvrššavanjaavanja niti poziva se njena metodametoda start()start()
deklarisana u unutar klase ThreadThread.
Metodom start()start() se zapravo upuupuććuje pozivuje poziv metodi run().
Metoda start()start() ima sledeću dekleraciju:
voidvoid start()start()
Instanca klase koja realizuje interfejsInstanca klase koja realizuje interfejs RunnableRunnable Ime nove nitiIme nove niti
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 13/24
Pravljenje nove nitiPravljenje nove niticlassclass NNovaNitovaNit implementsimplements RunnableRunnable { { //// pravljenje niti, interfejsompravljenje niti, interfejsom
ThreadThread tt;;
NNovaNitovaNit()() { { //// kreiranje nove druge nitikreiranje nove druge niti
t =t = newnew Thread(Thread(this,this, "Demo"Demo NitNit");"); // this// this--nova nit poziva run() tekunova nit poziva run() tekuććeg obj.eg obj.
System.System.outout.println(".println("Potomak nitPotomak nit: " + t);: " + t);
tt.start();.start(); } } //// StartStartovanje izvrovanje izvrššenja nitienja niti -- pokrepokrećće petlju for u potomkue petlju for u potomku
publicpublic voidvoid run()run() { {
trytry { {
for(int i = 5; i > 0; ifor(int i = 5; i > 0; i----) {) {
System.System.outout.println(".println(" Potomak nitPotomak nit: " + i);: " + i);
ThreadThread.sleep(500);.sleep(500);
} } } } catchcatch (InterruptedException(InterruptedException ee) {) {
System.System.outout.println(".println("Potomak nit prekinutaPotomak nit prekinuta.");.");
} }
System.System.outout.println(".println("Izlazak iz potomak nitiIzlazak iz potomak niti.");."); } }
} }
Jedan od Thread konstruktoraJedan od Thread konstruktora
Ulaz u nit, izvrUlaz u nit, izvrššni kodni kodniti. Implementiranjeniti. Implementiranje
run()run() metodemetode
PrivremenoPrivremenozaustavljanjezaustavljanjeizvrizvrššenje nitienje niti
KlasaKlasa NovaNitNovaNit kojakojarealizuje interfejsrealizuje interfejs
RunnableRunnable
Kod nitiKod niti
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 14/24
IzvrIzvrššenje nove nitienje nove niticlassclass ThreadDemo {ThreadDemo {
publicpublic staticstatic voidvoid mainmain(String args[])(String args[]) { {
newnew NNovaNitovaNit();(); //// kkrereiranjeiranje nove nitinove niti
trytry { {
for(int i = 5; i > 0; ifor(int i = 5; i > 0; i----) {) {
System.System.outout.println(".println("Glavna nitGlavna nit: " + i);: " + i);
Thread.Thread.sleepsleep(1000);(1000);
} }
} } catchcatch (InterruptedException(InterruptedException ee) {) {System.System.outout.println(".println("Glavna nit prekinutaGlavna nit prekinuta.");.");
} }
System.System.outout.println(".println("Izlazak iz glavne nitiIzlazak iz glavne niti.");."); } }
}
Obe niti seObe niti se
izvrizvrššavaju deleavaju deleććiivremevreme
procesoraprocesora
Gl. Nit se u svakojGl. Nit se u svakojiteraciji zadriteraciji zadržžavaava
1000ms, a1000ms, a
potomak 500ms.potomak 500ms.
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 15/24
Pravljenje niti klasom Thread (1)Pravljenje niti klasom Thread (1) Koako je već napomenuto, nit se može napraviti i
nasleđivanjemnasleđivanjem klase ThreadThread.
Nova potklasa moramora da redefiniredefiniššee metodu run()run() i onapredstavlja ulaznu taulaznu taččku u nitku u nit.
Metoda run()run() najčešće odmah poziva metodu start()start() da bi nova
nit počela da se izvršava. U nastavku je dat primer formiranja nove niti nasleđivanjem
klase ThreadThread.
Dodeljivanje pripritetapripriteta niti se obavlja primenom metodesetPriority()setPriority() koja je član klase ThreadThread:
finalfinal voidvoid setPriority(setPriority(intint nivo)nivo)
Argument nivoArgument nivo ima vrednostivrednosti od 1 do 101 do 10.
Prioritet nitiPrioritet niti se može dobiti preko metode finalfinal getPriority()getPriority()..
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 16/24
//// Pravljenje druge niti nasleđ ivanjemPravljenje druge niti nasleđ ivanjem (pro(prošširavanjem) klaseiravanjem) klase ThreadThread
classclass NewThreadNewThread extendsextends Thread {Thread {
NewThread() {NewThread() {
supersuper("Demo("Demo NitNit");");
System.System.outout.println(.println(““Nit potomakNit potomak: " + this);: " + this);
start()start();; } }
publicpublic voidvoid run() {run() {trytry { {
for(int i = 5; i > 0; ifor(int i = 5; i > 0; i----) {) {
System.oSystem.outut.println(.println(““Nit potomakNit potomak: " +: " + ii););
Thread.Thread.sleepsleep(500);(500);
} }
} }catchcatch (InterruptedException(InterruptedException ee))
{System.o {System.outut.println(.println(““Prek. Nit potomak.Prek. Nit potomak.");}");}System.System.outout.println(.println(““Izlaz iz niti potomak.Izlaz iz niti potomak.");");
Pravljenje druge nove nitiPravljenje druge nove niti
Ulazna taUlazna taččka druge nitika druge niti
StartStartovanje nitiovanje niti
Konstruktor nove klaseKonstruktor nove klase
Pravljenje niti klasom Thread (2)Pravljenje niti klasom Thread (2)
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 17/24
Pravljenje niti klasom Thread (3)Pravljenje niti klasom Thread (3)classclass ExtendThread {ExtendThread {
publicpublic staticstatic voidvoid mainmain(String args[]) {(String args[]) {
newnew NewThread();NewThread();
trytry { {
for(int i = 5; i > 0; ifor(int i = 5; i > 0; i----) {) {System.out.println("Main Thread: " + i);System.out.println("Main Thread: " + i);
Thread.Thread.sleepsleep(1000);(1000);
} }
} } catchcatch (InterruptedException(InterruptedException ee) {) {
System.System.outout.println("Main thread interrupted.");.println("Main thread interrupted.");
} }
System.System.outout.println("Main thread exiting.");.println("Main thread exiting."); } }
Kreiranje nove nitiKreiranje nove niti
Rezultat je isti kaoRezultat je isti kaoiz prethodnogiz prethodnogprimeraprimera
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 18/24
Sinhronizacija niti (1)Sinhronizacija niti (1) SinhronizovanjeSinhronizovanje je programerski način da se resurs koristi
samosamo od jedne jedne niti u jednom jednom trenutku.
MonitorMonitor je objekatobjekat u Javi koji se koristi za uzajamnouzajamnoiskljuisključčivanjeivanje niti.
SamoSamo jedna nit jedna nit u jednom trenutku može biti u monitorumonitoru.
Niti kojeNiti koje ččekajuekaju da “uđu” u monitor biće zadrzadržžaneane sve dokprva nit koja se nalazi monitoru ne izađeizađe iz njega.
Java za sinhronizovanje nitisinhronizovanje niti koristi rez. reč synchronizedsynchronized.
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 19/24
Sinhronizacija niti (2)Sinhronizacija niti (2)class MyClass {class MyClass {
synchronizedsynchronized publicpublic voidvoid method1() {method1() {
// Code for the method...// Code for the method... } }
synchronizedsynchronized publicpublic voidvoid method2() {method2() {
// Code for the method...// Code for the method... } }
publicpublic voidvoid method3method3() {() {
// Code for the method...// Code for the method...
} }
} }
Metode deklarisaneMetode deklarisanerezervisanom rerezervisanom reććii
synhronizedsynhronized
Metode koji nijeMetode koji nije
deklarisan rezervisanomdeklarisan rezervisanomrereććii synhronizedsynhronized
Od dvaOd dva synhronizedsynhronized metoda, samo se jedan mometoda, samo se jedan možže izvre izvrššavati uavati uodređenom trenutkuodređenom trenutku. Metoda. Metoda method3method3 se mose možže izvre izvrššavati bezavati bez
obzira na izvrobzira na izvrššavanje synchronized metodaavanje synchronized metoda
Synhronized metode razliSynhronized metode različčitih objekata se mogu izvritih objekata se mogu izvrššavati istovremeno!avati istovremeno!
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 20/24
Sinhronizacija niti (3)Sinhronizacija niti (3)
IZVRIZVRŠŠI, monitor nije zauzetI, monitor nije zauzet
obj1obj1synchronized
method1()
synchronizedmethod2()
method3()
synchronizedmethod1()
synchronizedmethod2()
method3()
Nit 1Nit 1
run() {
Obj1.method2();
}
run() {
Obj1.method2();
}
Nit 2Nit 2run() {
Obj1.method3();Obj1.method1();Obj1.method1();
}
run() {
Obj1.method3();Obj1.method1();Obj1.method1();
}
Nit 3Nit 3
run() {
Obj2.method3();Obj2.method2();
}
run() {
Obj2.method3();Obj2.method2(); }
obj2obj2synchronized
method1()
synchronizedmethod2()
method3()
synchronizedmethod1()
synchronizedmethod2()
method3()
11
22
3344
5566
ČČEKAJ!, monitor zauzetEKAJ!, monitor zauzet
VremeII IIII IIIIII
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 21/24
Sinhronizacija niti (4)Sinhronizacija niti (4) Dakle, saradnja dve asinhroneasinhrone programske niti se ostvaruje
njihovom međusobnom sinhronizacijomsinhronizacijom.
U Javi svaki objekatsvaki objekat ima svoj sopstvenisopstveni monitormonitor u koji seautomatski ulazi čim se pozove neka od sinhronizovanihsinhronizovanih
metodametoda.
SamoSamo jedna nit
u jednom trenutkuu jednom trenutku može biti u monitoru.
Kada nit uđe u monitoruđe u monitor ona ga “zakljuzaključčaa”” (engl. lock).
Monitor je objekatMonitor je objekat koji se koristi kao uzajamno iskljuuzajamno isključčivanjeivanje
bravabrava.
Ostale niti biće zadrzadržžaneane sve dok prva nit ne izađeizađe iz monitora.
U monitorU monitor određenog objektaobjekta se ulazi pozivom metode koja je
modifikovana reč ju synchronizedsynchronized.
synchronizedsynchronized(objekat)(objekat) { { ...... // naredbe koje treba sinhronizovati// naredbe koje treba sinhronizovati
} }
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 22/24
Sinhronizacija niti (5)Sinhronizacija niti (5) Objekat predstavlja referencureferencu na objekat koji se sinhronizuje.
Na ovaj način se poziv metode može uputiti tek kada metodatek kada metoda
uđeuđe u monitor objekta. Dok nit boraviboravi unutar sinhronizovanesinhronizovane metodemetode, sve druge niti
koje upućuju poziv toj metodi iste instance objekta moraju damoraju da
ččekajuekaju.
OgraniOgraniččenje pristupa nitienje pristupa niti se realizuje serijalizacijomserijalizacijom
pristupanju metodi (u ovom slučaju poziv()poziv())na sledeći način:
ClassClass PozoviMePozoviMe { {
synchronizedsynchronized voidvoid poziv(poziv(StringString poruka) { ..........poruka) { ..........
} }
Ako se sinhronizacijaAko se sinhronizacija ne može postići sinhronizovanimsinhronizovanimmetodamametodama treba pokušati sa sinhronizovanim objektimasinhronizovanim objektima.
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 23/24
Upotreba sinhronizacionih nitiUpotreba sinhronizacionih niti
Rač
unarske operacijesu preklopljene
Banka
RaRaččun uun ubancibanci
Operacija potraživanja
Operacija dugovanja
Službenik 1
Službenik 2
Potraži-
vanje
Dugova-nje
7/21/2019 12_Visenitno Programiranje u Javi
http://slidepdf.com/reader/full/12visenitno-programiranje-u-javi 24/24
Komuniciranje izmeđ
u nitiKomuniciranje izmeđ
u niti KomunikacijaKomunikacija između nitiizmeđu niti se odvija posredstvom metodametoda:
Wait()Wait(), naredba za napuštanje monitora
Notify()Notify(),, ponovno pokretanje niti koja je pozvala metodu wait()istog objekta.
NotifyAll()NotifyAll(),, ponovno pokretanje svih niti koje su pozvale metodu
wait() istog objekta. Pristup će biti odobren samo jednoj od niti.
Ove metode su deklarisane u objektu ObjectObject i mogu se pozvati
samosamo iz sinhronizovanogsinhronizovanog objekta upotrebom naredbe
synchronizedsynchronized.
Ranije verzije Jave su koristile metode suspend()suspend() i resume()resume()definisane klasom ThreadThread.
KadaKada treba raditi sa više niti? (Ako se napravi suviše
programskih niti, mogu se snizitisniziti performanse programa!).
Zašto?