2016-11-10 84 views
0

嗨,任何一個可以幫助我理解下面的代碼片段的輸出?單線程與線程調用

枚舉 -

public enum SingletonEnum { 
    INSTANCE; 
    int num; 

    public void demo(){ 
    System.out.println(num); 
    } 
} 

主類 -

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();  
} 

的O/P是8,8。但是,如果我在枚舉的O/P爲5和8加一個私有構造。o/p是8和8的邏輯是什麼。

+0

這可能是一個競爭條件,即't2'在't1'調用'demo()'之前設置值8。請注意,'samp'和'temp'指的是_exact same_實例。 – Thomas

回答

0

你的代碼是不同步的。這只是一個不確定的行爲,你可以在這種情況下觀察任何事情。

+0

對,剛開始在singleton上使用枚舉時,完全忘記了枚舉中聲明的方法和所有內容都不是線程安全的。非常感謝 。 – Mainak