2017-01-19 4 views
1
public class UnsafeLazyInitialization { 
    private static Resource resource; 

    public static Resource getInstance() { 
     if (resource == null) //1 
      resource = new Resource(); //2 
     return resource; //3 
    } 
} 
  1. は、それはイエス親切なぜ、どのように理解するために私を助ける場合はインスタンスリターンヌルを得ることは可能でしょうか?
+7

いいえ、nullを返しません。複数のスレッドから呼び出すと、 'Resource'のインスタンスが複数作成されるかもしれませんが、nullは返されません。 – khelwood

+1

これは、Thread1が// 3の直前で、Thread 2がリソースをnullにリセットした場合にのみ発生します。しかし、与えられたコードを考慮すると、それだけではありません。 – Fildor

+0

私はいくつかのウェブサイトで私はjvmのconcepetは、書き込まれた原因になることができます –

答えて

0

getInstance()は、nullを返しません。

この実装の危険性は異なります。getInstance()がインスタンスを1つだけ返すという保証はありません。言い換えれば、あなたのシングルトンは本当にシングルトンではありません。

関連する問題