单例模式

Posted

tags:

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

单例模式下饿汉模式效率最好
 
饿汉模式
class Single
{
     private static final Single s=new Single();
    private Single(){}
    public static Single getInstance()
    {
        return s;
    }
}
 
 
懒汉式  延迟加载实例的单列模式
class Single
{
    private static  Single s=null;
    private Single(){}//构造函数是私有的,只能在本类中实例化该类。
    public static Single getInstance()//类外面通过调用该类的静态方法实例化该类
    {//这种模式目的是只能实例化类的一个对象,不能实例化多个对象。
//但是当多线程对其调用时,可能会在进入f(s==null) 后线程释放CPU,另一个线程进入仍然对  f(s==null)的判断为真,那么会导致再次实例化对象,使得S指向另个一个空间,因为这里类的实例化对象是属于类的, static  Single s引发更改错误。     
可以getInstance()加上同步,但是这样会找出效率低效,因为多线程调用时每次都要判断锁。      
            if(s==null)
                s=new Single();  
           return s;
      }
}
 
 
强化懒汉式
class Single
{
    private static  Single s=null;
    private Single(){}
    public static Single getInstance()
    {      
        if(s==null)
        {             
                synchronized(Single.class)//这里方法是静态方法,不能使用对象this锁,只能使用类锁
                {
                    if(s==null)
                        s=new Single();  
                }
            }
           return s;
      }

}  

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

多线程 实现单例模式 ( 饿汉懒汉 ) 实现线程安全的单例模式 (双重效验锁)

单例模式(饿汉式单例模式与懒汉式单例模式)

饿汉单例模式 and 懒汉单例模式

单例模式——懒汉式饿汉式

如何实现单例模式

单例模式之饿汉方式实现与静态内部类实现的区别