Professional Documents
Culture Documents
Nedostaci:
2. Načini kreiranja niti u programskom jeziku Java (objasniti ukratko interfejs Runnable i klasu Thread).
Interfejs Runnable
Interfejs Runnable je izuzetno jednostavan, i sadrži samo jedan metod run ()
Ovaj metod se mora implementirati u klasi zadatka kako bi se ukazalo da se taj zadatak izvršava u
posebnoj niti.
Klasa Thread
Fali objasnjenje…
3. Metode za rad sa klasom Thread (navesti bar 3 i objasniti, npr. start(), run() i sleep())
run() - obezbeđuje izvršavanje niti.
start() - pokreće novu nit i počinje izvršavanje metode run() u novoj niti.
sleep() - uspavljuje nit za određeni broj milisekundi.
4. Navesti i objasniti metode za prekidanje definisane u klasi Thread.
void interrupt() - šalje “prekid”niti i postavlja joj status prekida
boolean interrupted() (statički) - testira da li je tekuća nit bila prekinuta i poništava status prekida
boolean isInterrupted() - testira da li je nit bila prekidana i ne menja status prekida
Niti su instance java.lang.Thread klase, ili instance podklasa (eng.subclass) ove klase.
Osim glavne niti koju pokreće JVM, niti se mogu kreirati putem konstruktora klase Thread ili
instanciranjem bilo koje klase koja je izvedena iz klase Thread.
Bilo koja Java nit može kreirati novu nit ili direktnim instanciranjem objekta klase Thread ili
objekta klase koja proširuje klasu Thread.
Direktnom primenom klase Thread konstruktoru se prosleđuje zadatak koji se izvršava u niti i
koji mora pripadati klasi koja implementira interfejs Runnable.
Kritična sekcija je deo koda koga izvršava više niti (zajednički kod), i gde od redosleda izvršavanja niti
zavisi rezultat izvršavanja koda u okviru kritične sekcije.
9. Objasniti dva načina sinhronizacije niti.
1.synchronized bloka Java koda :
U slučaju manjih kritičnih sekcija (manje linija koda), cela kritična sekcija može da se definiše
kao sinhronizovani blok Java koda.
2.synchronized metoda:
Obezbeđuje da se izvršavanje sinhronizovanog metoda ili naredbe ne može prekinuti od
strane neke druge niti.
Semafori se prave na osnovu algoritama za rešavanje problema kritične sekcije i imaju specijalne
promenljive kako bi korisnici lakše manipulisali sa njima.
Semafori mogu biti implementirani na nivou samog operativnog sistema, na nivou određene
platforme, ali mogu biti i transparentni i korišćeni putem određenih ključnih reči kao što je to slučaj sa
Javinom ključnom rečju synchronized kojom se obezbeđuje sinhronizovan pristup resursima objekta
neke klase.
1. Ako je brojačka promenljiva semafore veća od nule, onda nit dobija dozvolu, što ima za posledicu
da se brojačka promenljiva semafore smanji za 1 (dekrement)
2. U suprotnom, nit će biti blokirana sve dok se ne stvore okolnosti da nit dobije dozvolu
3. Kada nit više ne želi da pristupa zajedničkom resursu, nit oslobađa dozvolu, što za posledicu ima da
se brojačka promenljiva semafore poveća za jedan (inkrement)
4. Ako u trenutku kada nit oslobađa dozvolu postoji neka druga nit koja čeka dozvolu, druga nit će u
tom trenutku dozvoli i dobiti
Metoda void acquire() - Ova metoda služi za dobijanje dozvole ako je dozvola raspoloživa i
smanjuje broj raspoloživih dozvola za jedan. Ako se nit prekine (eng. interrupt) dok čeka
dozvolu, dolazi do InterruptedException
void acquire(int permits) -Ova metoda služi za dobijanje određenog broja dozvola ako su
dozvole raspoložive i smanjuje broj raspoloživih dozvola za određeni broj. Ako se nit prekine
(eng. interrupt) dok čeka dozvolu, dolazi do InterruptedException
boolean tryAcquire() - Ova metoda služi za dobijanje dozvole i ako je dozvola raspoloživa, broj
dozvola se smanjuje za jedan. Ako ni jedna dozvola nije raspoloživa, ova metoda odmah vraća
vrednost false.
boolean tryAcquire(int permits) - Ova metoda služi za dobijanje određenog broja dozvola i
ako je određeni broj dozvola raspoloživ, broj dozvola se smanjuje za taj broj. Ako traženi broj
dozvola nije raspoloživ, ova metoda odmah vraća vrednost false.
*void release() - Ova metoda oslobađa dozvolu i povećava broj raspoloživih dozvola za jedan. Ako
bilo koja nit pokušava da dobije dozvolu, onda jedna od niti koje čekaju na dozvolu dobijaju dozvolu
koja je oslobođena.
*void release(int permits) - Ova metoda oslobađa odgovarajući broj dozvola i povećava raspoloživi
broj dozvola za taj broj. Ako bilo koja nit pokušava da dobije dozvolu, onda jedan od niti koje čekaju
na dozvolu dobijaju dozvolu koja je oslobođena. Ako neka nit čeka veći broj dozvola i ako broj
oslobođenih dozvola odgovara tom broju, onda nit koja čeka nastavlja sa izvršavanjem, a u
suprotnom i dalje nastavlja da čeka na dozvole.
29. Prednosti primene semafora.
Prednosti njihove primene:
*Semafori nameću namerna ograničenja koja pomažu programerima da izbegnu greške.
*Rešenja koja koriste semafori su čista i organizovana, što ih čini jednostavnim da pokažu svoju
tačnost.
*Semafori se mogu efikasno implementirati na mnogim sistemima, pa tako i rešenja koja koriste
semafori su prenosiva i obično efikasna.
31. Definicija kolekcija i navesti koje kolekcije postoje u Java programskom jeziku.
Strukture podataka služe sa čuvanje nekih grupa elemenata, tzv. kolekcija, kao i za efikasno rukovanje
njima.
U standardnoj Java biblioteci, to mogu biti:
liste,
skupovi,
redovi opsluživanja
i mape.
32. Navesti i ukratko objasniti interfejste koji se koriste za rad sa Java kolekcijama (List, Set, Map,
Queue):
List: Dinamička lista elemenata, može proizvoljno rasti i smanjivati se, shodno broju elemenata.
Set: Predstavlja skupove. Postoji još jedan interfejs za skupove, SortedSet, koji nasleđuje Set i sortira
elemente po određenom kriterijumu.
Map: Mapa koja sadrži parove elemenata u obliku ključ → vrednost. Slično kao kod skupova, iz ovog
interfejsa je izveden interfejs SortedMap koji predstavlja mape sa sortiranim ključevima.
Queue: Red opsluživanja. Interfejs koji ga nasleđuje, Deque, predstavlja redove opsluživanja koji
mogu prihvatati i izbacivati elemente sa obe strane.
33. Navesti i ukratko objasniti metode koje su definisane u skoro svim kolekcijama.
Queue predstavlja standardni red opsluživanja: elementi se dodaju na kraj, a uzimaju sa početka.
• Deque (skraćeno od eng. double-ended queue dvostrani red) nudi mogućnost dodavanja i uklanjanja
elemenata i s kraja i sa početka.
• LinkedList se preporučuje samo kada dodajemo ili uklanjamo puno elemenata sa početka liste. Pored
toga, ova klasa implementira i interfejs Deque, te se može upotrebiti za simulaciju reda opsluživanja i
steka.
• PriorityQueue koja automatski sortira elemente, Bitno je napomenuti da, iako su elementi sortirani,
prolazak kroz PriorityQueue upotrebom iteratora ne garantuje redosled elemenata.
Rezultat: