Cheatography
https://cheatography.com
Dinge die ein Java Programmierer wissen sollte aber meist vergisst
This is a draft cheat sheet. It is a work in progress and is not finished yet.
Volatile Variablen
1. Vor jeder Auswertung der Variable (Laden) wird ihr aktueller Wert aus dem Hauptspeicher in den lokalen Thread Speicher geholt (gelesen). |
2. Nach jeder Zuweisung (Speichern) wird ihr aktueller Wert aus dem lokalen Thread Speicher in den Hauptspeicher geschrieben. |
3. Volatile Variablen werden in genau der Reihenfolge geschrieben oder gelesen wie vom Thread angefordert. |
4. Die Lese- und Schreibzugriffe sind immer atomar (auch bei double und long -64 bit Werten- bei denen das sonst nicht so ist). |
Singleton - unsichere Initialisierung
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 Intialisierung
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;
}
|
|