Konkurentno i distribuirano programiranje u Javi

Konkurentno i distribuirano programiranje u Javi

offline
  • Pridružio: 25 Apr 2006
  • Poruke: 322

Osnove konkurentnog i distribuiranog programiranja u Javi

Pored nezaobilazne preporučene literature iz konkurentnog i distribuiranog programiranja:

1. The Little Book of Semaphores, Allen B. Downey
2. Taming Java Threads, Allen Holub
3. Foundation of Multithreaded, Parallel and Distributed Programming, Gregory Andrews, Addison Wesley,2000
4. Konkurentno i distribuirano programiranje, Zaharije Radivojević, Igor Ikodinović, Zoran Jovanović, Akademska misao, 2008

korisno je pogledati sledeće video snimke sa praktičnih vežbi dr Zaharija Radivojevića, na Elektrotehničkom fakultetu Univerziteta u Beogradu.

Obrađene su sledeće oblasti:

1. Sinhronizacija niti
2. Distribuirano programiranje pomoću soketa
3. Udaljeni pozivi metoda (RMI)




Sa prvog snimka se može naučiti sledeće:

1. Osnove rada u razvojnom okruženju Eclipse
Arrow Download

2. Koncept poštanskog sandučeta (Message Box)

3. Izrada jednostavnog GUI-ja (pomoću Java Swing)
- Komponente JButton, JTextArea, JWindow
- Koncept Event-a (događaja) i Action listener-a.

4. Ponavljanje osnova programskog jezika Java
- paketi
- metode
- prosleđivanje argumenata
- definicija promenljivih
- klase
- interfejsi
- konstante
- gotove klase za rad sa listom i drugim strukturama podataka
- izuzeci
- događaji
- generičke klase

5. Koncept bounded buffer-a (kružnog bafera)

6. Sinhronizacija niti i rada poštanskog sandučeta pomoću interfejsa Lock i njegove implementacije ReentrantLock





Na drugom snimku se može videti:

1. Debagovanje u razvojnom okruženju Eclipse
2. Demonstracija i ispravljanje najčešćih grešaka u sinhronizaciji i GUI-ju
3. Implementacija poštanskog sandučeta koristeći ključnu reč synchronized
4. Implementacija poštanskog sandučeta koristeći nizove i semafore u Javi (u java.util.concurrent paketu)




Treći snimak:

1. Upoređivanje performansi prethodnih implementacija poštanskog sandučeta
2. Tokovi podataka u programskom jeziku Java
3. Implementacija poštanskog sandučetu u distribuiranom okruženju pomoću soketa




Četvrti snimak:

1. Implementacija poštanskog sandučeta pomoću udaljenih poziva metoda (RMI u Javi)


Svaka ispravka, bilo stručna, bilo u vezi izgleda teme je dobrodošla smešak



Dopuna: 09 Dec 2012 21:34


Sinhronizacija niti pomoću ključne reči synchronized, metoda wait i notify

Deo koda ili metod se mogu deklarisati kao kritična sekcija korišćenjem ključne reči synchronized.

1. Deo koda
synchronized (someObject) { ... }
U ovom slučaju, deo koda je kritična sekcija, a objekat odgovara uslovnom kritičnom regionu.

2. Metod
public class SomeClass { public synchronized void f(...) { ... } }Deo koda je kritična sekcija, a objekat odgovara monitorima sa signal and continue disciplinom.

3. Naredba wait()

Naredba wait prekida izvršavanje niti i stavlja je u stanje čekanja. Privremeno se skida zabrana drugim nitima koje pristupaju monitoru.

wait(tmilisec) Čeka se najviše tmilisec milisekundi dok neka druga nit ne pozove notify() ili notifyAll() za taj objekat.

wait(tmilisec,tnanosec) Čeka se najviše tmilisec milisekundi i tnanosec nanosekundi dok neka druga nit ne pozove notify() ili notifyAll() za taj objekat.

wait() Čeka neograničeno dok neka druga nit ne pozove notify() ili notifyAll() za taj objekat.

4.Naredba notify()

Naredba notifyАll() šalje notifikaciju svim nitima koje čekaju da pristupe ciljnom objektu da to mogu učiniti.
Naredba notify() radi isto što i notifyАll(), ali notifikuje samo jednu nit.

Demonstriraćemo upotrebu ključne reči synchronized i pomenutih metoda u sinhronizaciji niti na primeru poštanskog sandučeta iz uvodnog dela članka.

public class ArrayMessageBox<T> implements MessageBox<T> {    Object[] buffer;    int first, last, size;    public ArrayMessageBox(int num) {       buffer = new Object[num];       first = 0;       last = 0;       size = 0;    }    public synchronized Message<T> get(long ttw, Status status) { //čitav metod je synchronized       while (size == 0) {          try {             wait(); //Čeka se da nešto ima u baferu.          } catch (InterruptedException e) {             e.printStackTrace();          }       }       Message<T> result = (Message<T>) buffer[first];       first = (first + 1) % buffer.length;       size--;       notifyAll();// Sve niti se obaveštavaju da je nešto uzeto iz bafera - to će probuditi proizvođače koji čekaju slobodno mesto u baferu.       return result;    }    public synchronized void send(Message<T> m, Priority p, long ttl) { //čitav metod je synchronized       while (size == buffer.length) {          try {             wait(); //Čeka se da ima barem jedno slobodno mesto u baferu.          } catch (InterruptedException e) {             e.printStackTrace();          }       }       buffer[last] = m;       last = (last + 1) % buffer.length;       size++;       notifyAll(); //Sve niti se obaveštavaju da je nešto ubačeno u bafer - to će probuditi one potrošače koji čekaju da uzmu nešto iz bafera.    } }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 816 korisnika na forumu :: 39 registrovanih, 7 sakrivenih i 770 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., babaroga, branko7, Chainsaw, darkangel, darkstar101, djboj, DJORDJE-NO-1, DonRumataEstorski, Dorcolac, dule clio, Duško, Dzoni90, Georgius, goxin, ikan, ivan979, kovac9mm, kovinacc, kuntalo, kybonacci, mane123, MarKhan, Milan A. Nikolic, milimoj, Miskohd, Oluj2.1, pavle_pzs, pein, peruni, Polemarchoi, sokars, Sonyboy, Suva planina, Toni, trutcina, vasa.93, Vlada78, vladancekicsrb