You are on page 1of 12

SPISAK PITANJA ZA 1 KOLOKVIJUM IZ NOOP

1. Definicija niti, prednosti i nedostaci.


Definicija:
Java niti (eng. Threads) su delovi programa koji se pokreću sami, dok ostatak programa radi nešto
drugo.

Prednosti: Manje vremena odziva, Ekonomičnost, Iskorišćenje višeprocesorske arhitekture

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.

public class MyThread implements Runnable {


public void run() {
....
}
}

Klasa Thread
Fali objasnjenje…

public class MyThread extends Thread {


public void run() {
....
}
}

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

5. Metode setPriority() i getPriority().


void setPriority (int prioritet) – JVM svakoj niti dodeljuje prioritet sa kojim se izvršava. Ovaj prioritet
se može menjati pozivom metode setPriority, a trenutni prioritet se može dobiti pozivom metode
getPriority().
getPriority() – vraća vrednost prioriteta niti uz koju se poziva.

6. Objasniti klasu Thread.

 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.

7. Implementacija interfejsa Runnable.


 Drugi način da se odredi kod koji će nit da izvršava jeste implementacijom interfejsa
java.lang.Runnable.
public class MyRunnable implements Runnable {
public void run(){
System.out.println("My Runnable running");
}
}

 Objekat Runnable se onda prosleđuje kao parametar konstruktoru klase Thread:


Thread myThread= new Thread(new MyRunnable());
myThread.start();

8. Uslov takmičenja i kritična sekcija.


Uslov takmičenja (eng. race condition) je specijalni uslov koji može da se desi unutar kritične sekcije.
Uslov takmičenja se u stručnoj literaturi nailazi pod različitim nazivima.
Tako na primer, često se sreće i pojam uslov trke niti, i slično.

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.

10. Sinhronizacija niti primenom klase Thread.

11. class SendThread extends Thread {


12. private String msg;
13. Sender sender;
14.
15. SendThread(String m, Sender obj) {
16. msg = m;
17. sender = obj;
18. }
19.
20. public void run() {
21. // samo jedna nit moze da posalje poruku
22. synchronized (sender) {
23. sender.send(msg);
24. }
25. }
26. }

11. Sinhronizacija niti implmentacijom interfejsa Runnable.

12. Načini rešenja problema kritične sekcije.

Kritična sekcija može se realizovati na sledeći način:


*Softverski (treba da zadovoljava određene pretpostavke i da ima određene osobine)
*Hardverski
*Pomoću operativnog sistema (OS) primenom sistemskih poziva i
*Pomoću viših programskih struktura za sinhronizaciju (monitori)
13. Osobine softverskog rešenja problema kritične sekcije.

*Međusobno isključivanje (eng.mutual exclusion), koje garantuje da se unutar kritične sekcije


istovremeno može da se nalazi najviše jedan proces. Kada se kaže „istovremeno“, misli se na trenutno
stanje–ne sme dva procesa istovremeno da uđu u kritičnu sekciju.
*Kritična sekcija se realizuje softverski bez pomoći OS.
*Nijedan proces koji se trenutno nalazi izvan svoje kritične sekcije ne sme da sprečava druge procese
da uđu u svoje kritične sekcije. Jedino proces koji se trenutno nalazi u kritičnoj sekciji sme da spreči
ostale da uđu u kritičnu sekciju.

14. Zahtevi softverskog rešenja pri rešavanju problema kritične sekcije.

Zahtevi softverskog rešenja mogu da se sumiraju na sledeći način:


* Da bude obezbeđena uzajamna isključivost.
* Da nema zaključavanja–krajnja nepravednost i
* Pravednost–da se obezbedi da svi napreduju pod određenim uslovima (ne može jednom procesu
jako dugo da se ne dozvoljava da dobije procesor, a da ostali čekaju previše).

15. Definicija semafora i operacije za rad sa semaforima.


Semafori su mesta u kodu koja propuštaju odmah, ili propuštaju malo kasnije, poput raskrsnica sa
semaforima.

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.

Dve osnovne operacije sa semaforima su: P i V.


P–ulazak i za sobom zatvaranje vrata, kako niko drugi ne bi mogao da prođe.
V–izlazak i otvaranje vrata za druge procese/niti.

16. Operacija zahtevanja jedinice resusa kod semafora.


Operacija zahtevanja jedinice resusa. Ukoliko su resursi smesta dostupni, odnosno ako je vrednost
semafora veća od nule (S>0), operacija se momentalno završava i vrednost semafora se umanjuje za
1, da bi oslikala da je jedna više jedinica resursa zauzeta.

17. Operacija signaliziranja semaforu da dati proces oslobađa jedinicu resursa.


Operacija signaliziranja semaforu da dati proces oslobađa jedinicu resursa. Vrednost semafora se
povećava za 1, i bilo koji proces koji je bio u stanju čekanja prestaje sa čekanjem i dobija jedinicu
resursa.
18. Koje vrednosti semafor može imati i kako se može implementirati?
Semafori mogu imati vrednosti 0 ili 1 (resursi nisu raspoloživi ili resursi jesu raspoloživi), ali mogu
imati i vrednosti 0,1,2,... (resursi nisu raspoloživi ili toliko i toliko jedinica resursa jeste raspoloživo).

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.

19. Objasniti problem busy wait kod semafora.


- aktivno čekanje (busy wait)
Tako dolazi do problema da se vrte prazne petlje i da se za to vreme ne radi ništa korisno, već se
nepotrebno troše resursi

20. Eliminisanje aktivnog čekanja kod semafora.

*Da bi se eliminisalo zauzeto čekanje, semafori se implementiraju na nivou OS

*Ovde nema čekanja


*Kada treba neki proces da radi, on smanji semafor za jedan
*Semafor može da bude i negativna
*Nakon smanjenja, proces gleda šta se desilo
*Ako semafor nije negativan, proces prolazi dalje
*Ako je semafor negativan, proces sebe dodaje na listu ovih koji čekaju

21. Objasniti pojam spin lock kod semafora.


Semafore sa zaposlenim čekanjem se nekada primenjuju i one se nazivaju katanac koji se vrti (eng.
spin lock)

22. Dobra i loša strana wakeup naredbe.


Naredba wakeup je poziv kratkoročnom dispečeru da proces postane aktivan

Dobra strana u ovom pristupu je da se štedi procesorsko vreme


Loša strana u ovom pristupu je ta što programer ne može ovo da uradi, već su ovo privilegovane
naredbe koje mogu da se izvrše samo iz kernelskog moda operativnog sistema
23. Prednost i mane spinlocka.
Prednosti su što je laka za pisanje i implementaciju
Može da bude brza ako ne troši mnogo resursa

Mana ove semafore je mogućnost pojave zauzetog čekanja


Za male procese je besmisleno koristiti velike semafore, jer se više resursa trosi na blokiranje, nego na
zauzeto čekanje

24. Objasniti brojački semafor.


Za razliku od binarnih semafora, koje imaju samo dva stanja 0 i 1 brojački semafori mogu da imaju i
druge pozitivne vrednosti
Brojački semafor ima kapacitet analogija sa parkingom koji ima na primer 500 parking mesta
Brojački semafor C može da se napravi od binarnih semafora S1 i S2

25. Objasniti kako nit koristi brojački semafor.


Kako bi nit koristila semaforu, nit koja želi da dobije pristup zajedničkom resursu pokušava da dobije
dozvolu:

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

26. Konstruktori klase Semafore.


Klasa java.util.concurrent.Semaphore obezbeđuje dva konstruktora

num - određuje broj početnih dozvola za pristup zajedničkim resursima


Postavljanjem vrednosti parametra konstruktora how na true, postiže se da niti dobijaju dozvole u
redosledu po kom su dozvole i tražile, što znači da je fairness (pravednost) niti postavljen na true
27. Nabrojati i objasniti metode za dobijanje dozvole kod semafora.

 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

 void acquireUninterruptibly() - 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, nit će nastaviti da čeka.

 void acquireUninterruptibly(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, nit nastavlja da čeka

 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.

28. Nabrojati i objasniti metode za oslobađanje dozvole kod semafora.

*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.

30. Generički metodi. Navesti jednostavan primer i objasniti?


Ukoliko je potrebno imati metod koji radi isto, ali za različite tipove, bez korišćenja generika bi bilo
potrebno napisati po jedan metod za svaki tip.
 public static void ispisi(Integer[] niz) { . . . }
 public static void ispisi(String[] niz) { . . . }
 public static void ispisi(Ucenik[] niz) { . . . }

Sa korišćenjem generičkih tipova je dovoljno napisati jedan metod


 public static <T> void ispisi(T[] niz) { . . . }

Metod se poziva na sledeći način:


 ImeKlase.<Ucenik>ispisi(niz);
 ImeKlase.<String>ispisi(niz);

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.

34. Objasniti dva standardna načina iteracije kroz kolekcije.


Postoje dva univerzalna načina za prolazak kroz kolekcije: for-each petlja i iterator.
• Upotreba for-each petlje je identična onoj kod nizova.
• Iterator je predstavljen istoimenim interfejsom sa sledećim metodima:
– next(): vraća sledeći element kolekcije;
– hasNext(): vraća true ukoliko postoji još elemenata kolekcije; i
– remove(): uklanja trenutni element iz kolekcije.

35. Navesti i ukratko objasniti klase za rad sa skupovima podataka.


 HashSet nudi najbolje performanse u toku izvršavanja, ali elemente čuva u proizvoljnom
redosledu.
 LinkedHashSet je nešto sporija implementacija, ali elemente čuva u redosledu u kom su
ubačeni u skup.
 TreeSet je najsporija, ali sortira elemente po nekom kriterijumu. Razlika funkcionalnosti ove
tri implementacije je data u sledećem primeru.

36. Objasniti kolekciju Map.


Map: Map 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.

37. Objasniti tri klase za rad sa mapama


 HashMap sadrži niz čvorova (Node) i oni čine klasu koja ima sledeće objekte: ( int hash, K key,
V value, Node next ).
 LinkedHashMap: Bucket je jedan element niza HashMap. Koristi se za čuvanje čvorova. Dva ili
više čvorova mogu imati isti bucket.
 TreeMap: Ne postoji ugrađeni način da, na primer, sortiramo cene voća koristeći TreeMap.
38. Objasniti tri metode definisane u interfejsu Map.
– keySet(): vraća skup svih ključeva. Povratna vrednost je tipa Set, jer ključevi moraju biti različiti;
– values(): vraća kolekciju svih vrednosti. Povratna vrednost je tipa Collection; i
– entrySet(): vraća skup svih Entry objekata.

39. Navesti i objasniti interfejse za rad sa redovima.

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.

40. Navesti i objasniti klase za rad sa redovima.

• 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.

41. Objasniti soritranje kolekcija primenom dva interfejsa.


42. Napisati šta se dobija kao rezultat izvršavanja sledećeg koda i objasniti obeležene linije koda.

import java.util.HashSet;____Ukljucujemo biblioteku


__________________________________________________

public class Main {


public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet< >();_______kreiramo kolekciju
HashSet_________________________
numbers.add(4);___dodajemo elemente u hashset
__________________________________________________
numbers.add(7);
numbers.add(8);

// Show which numbers between 1 and 10 are in the set


for(int i = 1; i <= 10; i++) {
if(numbers.contains(i))
{__________________________________________________
System.out.println(i + " was found in the set.");
} else {
System.out.println(i + " was not found in the set.");
}
}
}
}
Rezultat:
43. Šta se dobija kao moguće rešenje izvršavanja sledećeg koda:

Rezultat:

You might also like