首页 > 代码库 > 单例模式

单例模式

单例模式主要作用:确保一个类最多只有一个实力,并提供一个全局访问点。

经典模式(懒汉):

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

  经典模式在多线程的情况下,会导致不能正常工作;

线程同步锁(懒汉):

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

使用同步锁,简单粗暴,但较为消耗资源。在大量调用的放大中不推荐使用。

‘急切’创建实例(饿汉):

public class Singleton{
   public volatile static Singleton uniqueInstance = new Singleton(); 
   private Singleton(){}
   public static Singleton getInstance() {  
         return uniqueInstance ;  
   } 
}

可以解决多线程的同步问题,直接在类装载就实例化。但在项目中这个方法根本就没有使用到,对内存资源也是有一定的消耗。

双重检查加锁:

 

 public class Singleton {  
     private volatile static Singleton singleton;  
     private Singleton (){}   
     public static Singleton getSingleton() {  
     if (singleton == null) {  
         synchronized (Singleton.class) {  
         if (singleton == null) {  
             singleton = new Singleton();  
         }  
        }  
     }  
     return singleton;  
     }  
 }  

 

在JDK1.5之后,双重检查锁定才能够正常达到单例效果。

单例模式