Singleton: Porovnání verzí
Smazaný obsah Přidaný obsah
vyčištění a sjednocení kódu s předchozími ukázkami |
přidání řešení jedné z nevýhod vzoru |
||
Řádek 267:
==Nevýhody==
Při využívání [[Vlákno (program)|vícevláknových]] aplikací se může stát, že první vlákno požádá o vytvoření jedináčka. [[Procesor]] přepne na druhé vlákno, kde ještě není jedináček vytvořen a je spuštěn proces tvorby jedináčka. Poté je přepnuto na první vlákno, kde byl jedináček započat a je dokončen. Už není jedináček, ale je to dvojče. Tomu by se dalo vyhnout [[Synchronizace|synchronizováním]] tovární [[metoda|metody]]
<source lang=java>
public class Singleton {
private static volatile Singleton instance = null;
public static Singleton getInstance() {
if (instance == null)
synchronized (Singleton.class) {
if (instance == null)
instance = new Singleton();
}
return instance;
}
}
</source>
''Řešení problému vícevláknových aplikací v Javě 5<ref name="reftwo"></ref>''
Další problém nastává u [[Serializace|serializovatelnosti]] jedináčka. Kdybychom chtěli načítat jedináčka uloženého ze [[stream]]u, například souboru, musíme zkontrolovat, jestli již nějaký takový jedináček neexistuje (Java poskytuje metodu, kterou je tato funkcionalita podpořena, jedná se o readSolve(), tato metoda vrací odkaz na aktuálního (původního) jedináčka, ale umožňuje ho například doplnit o novinky jedináčka ze streamu).
|