2016-11-10 13 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 iが列挙型でプライベートコンストラクタを追加する場合は、O/pは5と8で8,8 .Howeverですo/pが8と8の背後にあるロジックは何ですか?

+0

おそらくレースの状態です。つまり、 't2'は' t1'が 'demo()'を呼び出す前に値8を設定します。 'samp'と' temp'は_exact same_インスタンスを参照しています。 – Thomas

答えて

0

あなたのコードは同期されていません。これは単に不特定の動作であり、このような場合は何も観察できます。

+0

右は、シングルトンの列挙型で作業を開始し、列挙型の中で宣言されたメソッドやすべてがスレッドセーフではないことを完全に忘れてしまいました。どうもありがとうございます 。 – Mainak

関連する問題