višedretvenost u javi
DESCRIPTION
Višedretvenost u Javi. Nataša Cvrlje Voditelj: mr.sc. Marko Čupić. Programski jezik Java. 1990. James Gosling dizajnirao programski jezik Oak Razni projekti dali mogućnost Oak-u da se razvija i sazrijeva Sun Microsystems otkrio da je ime Oak već upotrijebljeno, te je promijenjeno u Java. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/1.jpg)
Višedretvenost u Javi
Nataša CvrljeVoditelj: mr.sc. Marko Čupić
![Page 2: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/2.jpg)
Programski jezik Java
1990. James Gosling dizajnirao programski jezik Oak
Razni projekti dali mogućnost Oak-u da se razvija i sazrijeva
Sun Microsystems otkrio da je ime Oak već upotrijebljeno, te je promijenjeno u Java.
![Page 3: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/3.jpg)
Programski jezik Java
Java je:
jednostavniobjektno-orijentirani višedretveni siguran programski jezik neovisan o platformi na kojoj se pokreće zbog
posebnog međukoda (eng. byte-code)
![Page 4: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/4.jpg)
Dretve
Računalo izvodi programe pripremljene u višem programskom jeziku.
Program se prevodi u strojni oblik proces.
Procesi u raznim fazama svojeg odvijanja raznoliko troše računalna sredstva
Omogućavamo da se više procesa odvija paralelno koristeći različita računalna sredstva.
![Page 5: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/5.jpg)
Dretve
Dretva niz instrukcija programa Suvremeni OS podržavaju izvođenje
procesa s više dretvi (višedretvenost) Oblik paralelizacije na razini procesa Izvedbena okolina Java programa
dopušta višedretveni način rada
![Page 6: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/6.jpg)
Kreiranje dretvi Aplikacija koja stvara primjerak razreda Thread : mora zadati kod koji će ta
dretva izvršavati nakon što ju se pokrene
Prvi način : stvorimo primjerak razreda Runnable
public class HelloRunnable implements Runnable { public void run() {
System.out.println(“U ovoj metodi se obavlja posao dretve.");
} public static void main(String args[]) {
(new Thread(new
HelloRunnable())).start(); }
}
![Page 7: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/7.jpg)
Kreiranje dretvi
Drugi način : stvorimo razred koji proširuje razred Thread
public class HelloThread extends Thread { public void run() {
System.out.println(“Pozdrav iz dretve!");
} public static void main(String args[]) {
(new HelloThread()).start();
}}
Drugi način je jednostavniji za uporabu i bolji kad je u pitanju neka jednostavnija aplikacija
![Page 8: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/8.jpg)
Životni ciklus dretve
![Page 9: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/9.jpg)
Osnovne operacije s dretvama
Pozivanje statičke metode Thread.sleep blokira izvršavanja dretve na određeni period vremena
Prekid (eng. Interrupt) je indikacija dretvi da prekine s obavljanjem trenutnog posla i da obavi neku drugu radnju
Dretva se smatra živom od trenutka neposredno prije početka izvođenja metode run() pa sve do trenutka povratka iz te iste metode.
![Page 10: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/10.jpg)
Višedretvenost
Komunikacija dretvi se primarno sastoji od dijeljenja pristupa istim poljima i varijablama.
Moguće su dvije vrste pogreški.
-interferencija dretvi
-pogreške dosljednosti memorije
![Page 11: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/11.jpg)
Višedretvenost
Interferencija se dogodi kada dvije operacije, koje se pokreću u različitim dretvama, pristupaju istim varijablama i memorijskim lokacijama u isto vrijeme.
Posljedica : različite dretve dobivaju različite informacije o istom podatku
![Page 12: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/12.jpg)
Višedretvenost
class Brojac { private int c = 0; public void increment() { c++;
} public void decrement() { c--; }
public int value() { return c;
}}
![Page 13: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/13.jpg)
Sinkronizirane metode Dva osnovna načina sinkronizacije dretvi:
sinkronizirane metode sinkronizirani blokovi naredbi
U deklaraciji metode dodajemo ključnu riječ synchronized
Što će se dogoditi ako više dretvi istovremeno pozove sinkronizirane metode nad istim objektom?
Samo jedna dretva će dobiti pristup metodi, ostale su blokirane
![Page 14: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/14.jpg)
Atomarni pristup
Atomarna naredba : izvodi se u jednom koraku Čak ni uvećavanje varijable za jedan nije
atomarna naredba Dodavanjem ključne riječi volatile u deklaraciju
varijable činimo njeno pisanje i čitanje atomarnom naredbom
![Page 15: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/15.jpg)
Mutexi
Kritični odsječci : djelovi koda koji koriste memorijske resurse nekog objekta što omogućuje pojavu pogreški ako to napravi više dretvi istovremeno
Za sinkronizaciju dretvi dovoljno zaštititi samo kritične odsječke
Osnovna ideja bi bila izgraditi mehanizam koji bi oponašao dvije metode:
UđiUKritičniOdsječak();
IzađiIzKritičnogOdsječka();
![Page 16: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/16.jpg)
Mutexi
Uloga mutexa jest da glumi objekt kontroler, a ostvaruje ju tako što ga koristimo u naredbi:
synchronized(mutex){...//kriticni odsjecak
}
Mutex učinkovito zamjenjuje naredbe :
UđiUKritičniOdsječak() : ulaskom u spomenuti blok IzađiIzKritičnogOdsječka() : izlaskom iz bloka
![Page 17: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/17.jpg)
Monitori
Sinkronizacija je izgrađena oko pojma složenih mutexa (eng. Intrinsic locks) koji se često nazivaju monitori
Dok god neka dretva posjeduje monitor , nijedna druga dretva ne može pristupiti resursima objekta.
Sve dretve koje za to vrijeme zatraže monitor, prelaze u blokirano stanje sve dok se monitor ne oslobodi.
Pri sinkronizaciji dretvi često se koriste metode wait(), notify(), te notifyAll() koje Java nudi kroz razred java.lang.Object.
![Page 18: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/18.jpg)
Potpuni zastoj i izgladnjivanje
Potpuni zastoj (eng. deadlock) predstavlja mogućnost lošeg ostvarenja sinkronizacije dretvi gdje postoji mogućnost da dvije dretve ostanu zauvijek blokirane, svaka od njih čekajući da ova druga obavi neku radnju.
Izgladnjivanje nastaje kada dretva nije u mogućnosti dobivanja pristupa varijabli koju dijeli s drugim dretvama te zbog toga ne može napredovati. Ova situacija nastaje ako je tu varijablu zauzela neka druga dretva na duži period vremena.
![Page 19: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/19.jpg)
Problem filozofa
![Page 20: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/20.jpg)
Problem filozofa
![Page 21: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/21.jpg)
Problem filozofa
![Page 22: Višedretvenost u Javi](https://reader035.vdocuments.site/reader035/viewer/2022062217/56814437550346895db0d0dc/html5/thumbnails/22.jpg)
KRAJ
Hvala na pažnji!