Hallo zusammen,
ich habe ein kleines Verständnisproblem bzgl Singleton und einer Variablen.
Ich habe zunächst folgende Klasse als Singleton implementiert...
und dann 2 Testklassen mit denen ich die Variable abfragen will:
Test1
und Test2:
Nun meine Frage - Warum erhalte ich bei Test1 für die Variable den Wert 100 (so wie ich ihn gesetzt habe), aber wenn ich mittels Test2 die Variable abfrage nur den Wert 0, bzw so wie im Source oben angegeben den Wert 2. Ich greife doch auf ein und dieselbe Instanz der Klasse zu und müßte deshalb doch über get und set die Werte der Variablen entsprechend setzen/bekommen. Synchronisiert läuft das ganze doch auch ab.... ?
ich habe ein kleines Verständnisproblem bzgl Singleton und einer Variablen.
Ich habe zunächst folgende Klasse als Singleton implementiert...
Java:
package singleton;
public final class Singleton {
/** Private Klasse, einzige Instanz von Singleton wird beim Laden von Holder erzeugt. */
private static class Holder {
private static final Singleton INSTANCE = new Singleton();
}
private int value;
/** Konstruktor ist privat, darf nicht von außen instanziiert werden. */
private Singleton() {
this.value = 12;
}
/** Statische Methode "getInstance()" liefert die einzige Instanz der Klasse zurück. */
public static Singleton getInstance() {
return Holder.INSTANCE;
}
public void setVal(int neu){
this.value = neu;
}
public int getVal(){
return this.value;
}
}
und dann 2 Testklassen mit denen ich die Variable abfragen will:
Test1
Java:
package singleton;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Singleton st = Singleton.getInstance();
System.out.println(st.getVal());
st.setVal(100);
System.out.println(st.getVal());
for(int i=0;i<10;i++){
System.out.println("..laufe..." + st);
System.out.println(st.getVal());
try {
Thread.sleep(2*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.exit(0);
}
}
und Test2:
Java:
package singleton;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Singleton st = Singleton.getInstance();
st.setVal(2);
for(int i=0;i<10;i++){
System.out.println("..laufe..." + st);
System.out.println(st.getVal());
try {
Thread.sleep(1*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.exit(0);
}
}
Nun meine Frage - Warum erhalte ich bei Test1 für die Variable den Wert 100 (so wie ich ihn gesetzt habe), aber wenn ich mittels Test2 die Variable abfrage nur den Wert 0, bzw so wie im Source oben angegeben den Wert 2. Ich greife doch auf ein und dieselbe Instanz der Klasse zu und müßte deshalb doch über get und set die Werte der Variablen entsprechend setzen/bekommen. Synchronisiert läuft das ganze doch auch ab.... ?