synchronized and singleton

本文主要介绍了几种利用Synchronized关键字实现线程安全单例模式的几种情况,比较其利弊。

  • Thread Safety & Singleton

A :

public class Singleton {
     private Singleton() {}
     private static Singleton instance = null;
     public static Singleton getInstance() {
      if(instance == null) {
          instance = new Singleton();
        }
    return instance;
    }
}

B :

public class Singleton{   
    private static Singleton instance=null;   
    private Singleton(){}   
    public static synchronized Singleton getInstance(){   
        if(instance == null){   
            instance = new Singleton();   
        }   
        return instance;   
    }   
}   

C :

public class Singleton{   
    private  static Singleton instance=null;   
    private  Singleton(){}   
    public   static  Singleton getInstance(){   
        if(instance == null){   
            synchronized(Singleton.class){  
                instance = new Singleton();   
            }   
        }   
        return instance;   
    }   
}   

D :

public class Singleton{   
    private static Singleton instance=null;   
    private Singleton(){} 
public static Singleton getInstance(){     
    if(instance == null){     
        synchronize (Singleton.class) {    
           if(instance == null){     
              instance =  new Singleton();      
            }     
         }     
    }     
    return instance;  
}