PDA

Prikaži potpunu verziju : Java konkurentnost


Ivan452
30.6.2012, 16:44
Pozdrav,

Ako imam 2 staticke metode npr. UpisiUFajl i CitajIzFajla koje barataju sa istim tekstualnim fajlom, a imam i vise niti koje mogu da pozivaju te metode. Da li je dovoljno da metode stavim kao synchronized ili bih morao (zato sto su 2 razlicite funkcije a 1 fajl) da se okrenem nekom drugom tipu resavanja problema?

pyost
3.7.2012, 15:01
Dodavanjem synchronized će se vršiti sinhronizacija na nivou klase, pa je to ono što ti treba (pretpostavljam da su obe metode u istoj klasi).

Analogno, kada metode ne bi bile statičke, sinhronizacija bi se vršila na nivou objekta, tj. ne bi istovremeno mogle da se izvršavaju dve metode istog objekta.

Ivan452
3.7.2012, 15:24
Resio sam da upotrebim reentrant lock. Jer mi je potrebno vise citalaca a jedan pisac.

Ali, cisto da budem siguran sto se ovoga tice jer mi i dalje nije jasno synchronized.

ako imam npr dve metode:
1. public static synchronized citaj1()
2. public static synchronized citaj2()
Koje obe rade istu stvar npr. citaju isti fajl

Da li to znaci da kada mi nit1 pozove citaj1() nit2 ne moze da izvrsi citaj2() sve dok nit1 ne zavrsi sa citaj1() ?

A sto se tice ne statickih metoda. Ako imam isto dve funkcije (samo bez static) koja se nalaze u jednoj klasi od koje ja napravim 2 objekta Objekat1 i Objekat2.
Da li to znaci da:
Ako nit1 pozove Objekat1.citaj1() nit2 ne moze da pozove Objekat1.citaj2()

Ali, ako nit1 pozove Objekat1.citaj1() i nit2 pozove Objekat2.citaj2() to ce proci?