aufgerufen Hallo kann mir jemand helfen, die Ausgabe des folgenden Snippets zu verstehen?Singleton mit Enum von Threads
Enum -
public enum SingletonEnum {
INSTANCE;
int num;
public void demo(){
System.out.println(num);
}
}
Hauptklasse -
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable(){
public void run(){
SingletonEnum samp = SingletonEnum.INSTANCE;
samp.num= 5;
samp.demo();
}
});
Thread t2 = new Thread(new Runnable(){
public void run(){
SingletonEnum temp = SingletonEnum.INSTANCE;
temp.num= 8;
temp.demo();
}
});
t1.start();
t2.start();
}
Die o/p sind 8 und 8 .Allerdings, wenn ich einen privaten Konstruktor in der Enumeration die o/p 5 addieren und 8 Was ist die Logik hinter dem o/p ist 8 und 8.
Das ist wahrscheinlich eine Rennbedingung, d. H. "T2" setzt den Wert 8, bevor 't1' 'demo()' aufruft. Beachten Sie, dass 'samp' und' temp' auf die _exact same_-Instanz verweisen. – Thomas