Avatar billede kristianp Nybegynder
12. oktober 2006 - 12:07 Der er 9 kommentarer

synchronized på singleton

Jeg har en singleton klasse med et map... er lidt i tvivl om jeg skal synkronisere dette map..

public class Dao{
    private SoftHashtable cache = new SoftHashtable(200);
    private static CachedGlobalParameterDAO singleton = null;
        ......

public static CachedGlobalParameterDAO getInstance() {
        if (singleton == null) {
        singleton = new CachedGlobalParameterDAO();
        }
        return singleton;

// Metode hvor map bliver brugt
private Object getObjectFromCache(String key) throws Exception {
        Object result = null;
        if ((result = cache.get(key)) == null) {
                result = hentParameteFraDB(key);
          cache.put(key, result);
        }
        return result;
    }


}
Avatar billede kristianp Nybegynder
12. oktober 2006 - 12:25 #1
Hov.. glemte lige denne metode

public void clearCache() {
    logger.debug("Clearing the cache !!!");
            cache.clear();
    }
Avatar billede mikkelbm Nybegynder
12. oktober 2006 - 12:28 #2
Hvis du kører et flertrådet system, så vil det nok ikke være en dum idé at synchronize, ellers er der ingen grund til det.
Avatar billede arne_v Ekspert
12. oktober 2006 - 13:23 #3
du kan enten have

synchronized(cache) {
  ...
}

i begge metoder eller nemmere gør begge metoder synchronized

PS: Du skal principielt også gøre getInstance synchronized
Avatar billede kristianp Nybegynder
12. oktober 2006 - 13:29 #4
Hvis jeg IKKE havde clearCache metoden... men kun getObjectFromCahce... skulle jeg stadig bruge synchronized ??
Det er vel også en overvejning om hvad skade der kan ske ved ikke at bruge synchronized. Det er jo tungt at bruge.
Avatar billede arne_v Ekspert
12. oktober 2006 - 13:38 #5
hvis SoftHashtable er threadsafe så vel ikke nødvendigvis (jeg kender ikke
SoftHashtable)

----

overhead ved synchronized er ret beskedent i moderne JVM's

skal du kalde metoden en milliard gange i time tæller det nok stadig, men ved
almindeligt brug er det meget lidt
Avatar billede kristianp Nybegynder
12. oktober 2006 - 13:59 #6
Jeg vælger at bruge
synchronized(cache) {
  ...
}

i de 2 metoder..

Giver du et svar arne ?
Avatar billede kristianp Nybegynder
12. oktober 2006 - 14:02 #7
Avatar billede arne_v Ekspert
12. oktober 2006 - 18:36 #8
OK
Avatar billede arne_v Ekspert
10. december 2006 - 00:04 #9
tid at acceptere svaret ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester