最佳懒汉式单例模式

单例模式。
单例模式有两种,饿汉式和懒汉式。前者不会出现同步问题,后者不仅有同步问题,而且即使使用同步函数,也会带来效率的问题。所以需要优化。
下面是代码详解:
【据说面试常考懒汉式,而实际应用中都是饿汉式】

//【饿汉式单例模式】:
//线程安全,对于贡献数据的操作带码不会产生不同步问题(只有一行);
class Single{
    private static Single s = new Single();
    private Single(){
    }
    //通过此方法获取对象,有点就是可控!。你可以根据条件是否返回该实例
    public static Single getInstance(){ 
        return s;
    }
}
//【懒汉式】
//线程不安全的,因为操作贡献数据的代码存在多行,会产生不同步!
//为了解决单例模式的线程不安全问题,因此需要同步代码【当然你可以直接用安全的恶汉式】
//以下就是,既安全又不会因为cpu的调度导致效率低下的懒汉式单例模式
class Single {
    private static Single s = null;
    private  Single(){}
    //  Thread2
    private static Single getInstanceSingle(){
        if(s==null){
            synchronized(Single.class) {
                //Thread1 
                if(s == null) {
                    return s  = new Single();
                }
            }
            //Thread0
        }
        return s;
    }

你可能感兴趣的:(面试系列)