[ bantu @ 11.03.2009. 15:06 ] @
Da li mi neko moze razjasniti jednu stvar?
Naime, primjetio sam da je cesta praksa da se se koriste neke pomocne klase sa staticnim metodama za neke uobicajene i ceste radnje tipa formatiranje datuma i slicno npr. MyUtility.formatirajDatum(Date d) itd.

E sada, mene interesuje koliko je to "sigurno" kad toj metodi pristupa vise niti odjenom, ili na primjer ako toj metodi pristupa vise servleta?
[ anon315 @ 11.03.2009. 15:51 ] @
Pa sve zavisi od toga sta te metode rade ;)

Util klase su obicno stateless, odnosno metode ne pristupaju deljenim podacima, pa je thread safe.

Ukoliko se ipak desi da metoda pristupa nekom deljenom resursu, onda samo moras da sinhronizujes kritican blok ili celu metodu..
[ Java Beograd @ 12.03.2009. 09:18 ] @
Da se nadovežem na Vanju: ako već radiš sa ovakvim funkcijama, sve šta treba toj funkciji za njen rad - predaš kao parametar u pozivu.
Primer koji si naveo je tipičan, funkcija ne koristi nikakve resurse, i ne radi ni sa kakvim promenljivima unutar klase u kojoj je definisana.
[ bantu @ 12.03.2009. 09:23 ] @
Da li je ovako nesto sigurno, da li treba ova metoda da se sinhronizuje?

Code:


package util;

import java.text.SimpleDateFormat;
import java.util.Date;


public class MojUtil {
    
    public static String formatirajDatum(Date d, String pattern){
        
            SimpleDateFormat df = new SimpleDateFormat(pattern);
            String s = df.format(d);        
        
        return s;        
    }

    
}



Po meni, ovde ukoliko dvije niti pristupe ovoj metodi u isto vrijeme moze se desiti da jedna nit postavi s i prije nego pozove return da druga nit postavi drugi s, da li sam upravu?

[ Java Beograd @ 12.03.2009. 09:28 ] @
Da se nadovežem na Vanju: ako već radiš sa ovakvim funkcijama, sve šta treba toj funkciji za njen rad - predaš kao parametar u pozivu.
Primer koji si naveo je tipičan, funkcija ne koristi nikakve resurse, i ne radi ni sa kakvim promenljivima unutar klase u kojoj je definisana.
[ Java Beograd @ 12.03.2009. 09:33 ] @
Citat:
bantu: Po meni, ovde ukoliko dvije niti pristupe ovoj metodi u isto vrijeme moze se desiti da jedna nit postavi s i prije nego pozove return da druga nit postavi drugi s, da li sam upravu?

Ne nisi u pravu. U momentu poziva, virtuelna mašina kreira instancu funkcije i izvršava je. Sledeći poziv dobija novu instancu funkcije. Ono šta je problematika u konkurentnom programiranju je promena vrednosti promenljivih (objekata) koji su definisani van tela funkcije. Tu je bitna sinhronizacija.
[ bantu @ 12.03.2009. 10:11 ] @

Ok, mislim da sam skužio. Hvala na pojašnjenju.

Dakle, VM pravi samo instancu metode a ne čitave klase, ili se možda varam? Stavio sam u konstruktor neku komandu koja se zaista nije izvršila, znači li to da se nikad nije ni kreirala instanca te klase već samo statičke metode?
[ Java Beograd @ 12.03.2009. 10:14 ] @
Vidi, instancu klase praviš ti, u kodu. Instanca funkcije je nešto drugo. Ona se "ne vidi" njom ne barataš, to je interno u okviru VM.
[ bantu @ 12.03.2009. 10:27 ] @

Ok. Sad su mi neke stvari jasnije. Uvjek sam se bojao koristiti ovaj model zbog neznanja.
[ anon315 @ 12.03.2009. 11:11 ] @
http://en.wikipedia.org/wiki/Call_stack