2016-11-10 40 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