java设计模式学习(四):单例模式

   单列模式:确保一个类只有一个实例,并提供一个全部访问点。单例模式主要应用于线程池、缓存中。单例模式主要有两种:懒汉模式和饿汉模式:

饿汉模式:

public class Singleton {

    private static Singleton singleton=new Singleton();
    
    private Singleton(){}
    
    public static Singleton getInstance(){
        return singleton;
    }
    
}
懒汉模式:

public class SluSigleton {

    private static SluSigleton singleton=null;
    
    private SluSigleton(){}

    public static SluSigleton getInstance(){
        
        if(null == singleton){
            singleton=new SluSigleton();
        }
        return singleton;
    }
}
上面的代码会有问题,并不能保证一定只有一个实例,需要改进

public class SluSigleton {

    private static SluSigleton singleton=null;
    
    private SluSigleton(){}
    /**
     * 多线程时,由于资源竞争,会导致创建多个实例,所以需要加锁
     * 这样会造成一定的负担,每次请求都要同步
     * @return
     */
    public static synchronized SluSigleton getInstance(){
        
        if(null == singleton){
            singleton=new SluSigleton();
        }
        return singleton;
    }
}
但是上面的代码会造成效率下降,可以对其进行改进

public class LockSigleton {

    private volatile static LockSigleton sigleton;
    
    private LockSigleton(){}
    
    public static LockSigleton getInstance(){
        if(null == sigleton){
            synchronized (LockSigleton.class) {
                if(null == sigleton){
                    sigleton=new LockSigleton();
                }
            }
        }
        return sigleton;
    }
}
这个做法可以大大缩减getInstance()的时间。这个做法需要JDK在1.4以上。



用放荡不羁的心态过随遇而安的生活
原文地址:https://www.cnblogs.com/re-myself/p/5532490.html