码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2016-12-01 03:28:29      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:同步   singleton   ret   经典   问题   模式   没有   get   同步锁   

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

经典模式(懒汉):

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

单例模式

标签:同步   singleton   ret   经典   问题   模式   没有   get   同步锁   

原文地址:http://www.cnblogs.com/fanfengzi/p/6120144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!