java singleton Instanziierung

Habe ich festgestellt, drei Arten der Instanziierung ein Singleton, aber ich habe Zweifel, ob eine von Ihnen ist die beste, die es gibt. Ich bin mit Ihnen in einer multi-threaded Umgebung, und lieber faul Instanziierung.

Beispiel 1:

private static final ClassName INSTANCE = new ClassName();

public static ClassName getInstance() {
    return INSTANCE;
}

Beispiel 2:

private static class SingletonHolder { 
    public static final ClassName INSTANCE = new ClassName();
}

public static ClassName getInstance() {
    return SingletonHolder.INSTANCE;
}

Beispiel 3:

private static ClassName INSTANCE;

public static synchronized ClassName getInstance()
{
    if (INSTANCE == null)
        INSTANCE = new ClassName();

    return INSTANCE;
}

Dem Projekt bin ich über ATM verwendet, Probe 2 überall, aber ich mag die Art von Probe 3 mehr. Es gibt auch die Enum-version, aber ich verstehe es einfach nicht.

Hier die Frage ist - in welchen Fällen sollte ich/sollten keine dieser Varianten? Ich bin nicht auf der Suche für die langen Erklärungen aber (es gibt viele andere Themen darüber, aber Sie alle schließlich in streiten, IMO), ich möchte es verständlich sein, mit wenigen Worten.

InformationsquelleAutor jurchiks | 2011-01-16
Schreibe einen Kommentar