单例模式

Posted 帆疯子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

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

经典模式(懒汉):

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之后,双重检查锁定才能够正常达到单例效果。

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块