Show Menu
Cheatography

Java Singleton Cheat Sheet (DRAFT) by

Diskussion und Beispiele zur Singleton Implementierung

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Diskus­sio­nss­eiten

Singleton - unsichere Initia­lis­ierung

Diese Implementierung hat folgende Besonderheiten:
[1] Theoretisch funktioniert sie nicht - in der Praxis taugt sie aber als Signleton (siehe dazu folgende Diskussion)
[2] Man darf sich hier bei Zugriff nicht auf ein korrekt initialisiertes Signleton verlassen, da im konkreten Fall auf Grund des Memory Modelles keine Annahmen darüber zugelassen sind wann die Felder des erzeugten Singleton wirklich alle korrekt befüllt und für jeden Thread konsistent lesbar sind.

public class Resource{
 private static Resource singleton;
public static Resource createInstance(){
   if(singleton==null){                                  //erster Test
    synchronized(Resource.class){
      if(singleton==null){                              //zweiter Test
         singleton=new Resource();
      } //endif
     } // end sync
   }// endif
 return singleton; 
 }
}

Singleton - korrekte Intial­isi­erung

private static volatile Resource resource;
private static volatile Resource singleton;
public static Resource createInstance(){
 if(resource==null){
  synchronized(Resource.class){
   if(singleton==null){
       singleton=new Resource();
   }
  }
  resource=singleton;
 }
 return resource;
}