싱글 톤 모드 (게으르고 배고픈) 전용 아이가 좋다

  Singleton 모드 (Singleton) : 클래스에 인스턴스가 하나만 있는지 확인하고 액세스 할 수있는 전역 액세스 포인트를 제공합니다.

  특징 :

  • 싱글 톤 클래스는 하나의 인스턴스 만 가질 수 있습니다.
  • 싱글 톤 클래스는 고유 한 인스턴스를 만들어야합니다.
  • 싱글 톤 클래스는이 인스턴스를 다른 모든 객체에 제공해야합니다.

  게으른 남자와 배고픈 남자의 차이점 :

  • 배고픈 사람은 일단 클래스가로드되면 싱글 톤이 초기화되어 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