Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 3.549 pregleda

Najnovija ↓

pozivanje staticne metode 11.03.2009. u 16:06 · pre 214 meseci #1
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?
Re: pozivanje staticne metode 11.03.2009. u 16:51 · pre 214 meseci #2
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..
Re: pozivanje staticne metode 12.03.2009. u 10:18 · pre 214 meseci #3
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.
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: pozivanje staticne metode 12.03.2009. u 10:23 · pre 214 meseci #4
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?

Re: pozivanje staticne metode 12.03.2009. u 10:28 · pre 214 meseci #5
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.
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: pozivanje staticne metode 12.03.2009. u 10:33 · pre 214 meseci #6
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.
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: pozivanje staticne metode 12.03.2009. u 11:11 · pre 214 meseci #7

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?
Re: pozivanje staticne metode 12.03.2009. u 11:14 · pre 214 meseci #8
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.
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: pozivanje staticne metode 12.03.2009. u 11:27 · pre 214 meseci #9

Ok. Sad su mi neke stvari jasnije. Uvjek sam se bojao koristiti ovaj model zbog neznanja.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme