シングルトンモード(怠惰で空腹)-一人っ子が良い

  シングルトンモード(シングルトン):クラスにインスタンスが1つしかないことを確認し、それにアクセスするためのグローバルアクセスポイントを提供します。

  特徴

  • シングルトンクラスは、インスタンスを1つだけ持つことができます。
  • シングルトンクラスは、独自の一意のインスタンスを作成する必要があります。
  • シングルトンクラスは、このインスタンスを他のすべてのオブジェクトに提供する必要があります。

  怠惰な人と空腹の人の違い

  • 空腹の人は、クラスがロードされると、シングルトンが初期化され、getInstanceのときにシングルトンがすでに存在することを確認します。

  • 怠惰な人々は怠惰であり、getInstanceが呼び出されたときにのみこのシングルトンを初期化するために戻ります。

  • 空腹の人は本質的にスレッドセーフであり、問​​題なくマルチスレッドに直接使用できます。

  • レイジースタイル自体はスレッドセーフではありません。スレッドセーフを実現するために、ダブルロックがあり、


怠惰なシングルトン

  方法1:Synchronized()ダブルロック

    class Singleton
    {
    
    
        private static Singleton instance;
        private static readonly object syncRoot = new object();//只读

        //构造方法private,规避了外界利用new创建此类的可能
        private Singleton()
        {
    
     }

        //此方法是获得本类实例的唯一全局访问点
        public static Singleton GetInstance()
        {
    
    
        	if (instance == null)	//第一次判断是否已创建实例
        	{
    
    
        		//没有就让一条线程进入并加锁,其它线程等待,等第一条出去以后解锁,然后下一条线程再进入并加锁,直到所有线程处理完毕。
        		lock (syncRoot)		
        		{
    
    
		            if (instance == null)   //二次判断是否已创建实例
		            {
    
    
		                instance = new Singleton(); //若没有就创建一个
		            }
		        }
            }
            return instance;//否则返回已有的实例
        }
    }

  メソッド2:Synchronized()メソッド

//Synchronized在指定的对象周围创建线程安全(同步)包装,每次执行都要同步
//无论是读和写,都要一个进行完在进行下一个
public static synchronized Singleton getInstance() 
{
    
    
    if (instance == null) 
    {
    
      
        instance = new Singleton();
     }  
     return instance;
}

  方法3:静的クラス:これはまだ理解していないので、ここで保持します

public class Singleton {
    
      
    private static class LazyHolder {
    
      
       private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){
    
    }  
    public static final Singleton getInstance() {
    
      
       return LazyHolder.INSTANCE;  
    }  
} 

空腹のシングルトン

クラスがロードされるとすぐにオブジェクトをインスタンス化し、事前にシステムリソースを占有します

//密封类阻止了继承,杜绝继承会增加实例的可能
public sealed class Singleton
{
    
    
	//在第一次引用类的任何成员时创建实例
	private static readonly Singleton instance = new Singleton();
	private Singleton()//构造方法私有
	{
    
    }
	public static Singleton GetInstance()
	{
    
    
		return instance;
	}
}

おすすめ

転載: blog.csdn.net/CharmaineXia/article/details/110916053