单例模式

2018-06-18 02:31:03来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

保证一个类只有一个实例 --> private构造函数  private static实例 --> public方法得到实例

 

一.线程不安全,同时进入if (uniqueInstance == null),会产生多个实例

public class Singleton {

    private static Singleton uniqueInstance;

    private Singleton() {
    }

    public static Singleton getUniqueInstance() {
        if (uniqueInstance == null) {
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }
}

二.线程安全, 但若不使用类则消耗资源

public class Singleton {

    private static Singleton uniqueInstance = new Singleton();

    private Singleton() {
    }

    public static Singleton getUniqueInstance() {
        return uniqueInstance;
    }
}

三.双锁模式

加锁区域内必须再进行一次if (uniqueInstance == null)判定

否则加锁的意义只是决定了实例化早晚的问题,而没有决定能否实例化的问题。

在第一次if (uniqueInstance == null)判定后加锁,可以保证若实例已存在就直接返回实例,只有当还未实例化的时候,才存在线程安全问题(此时才涉及到new对象)

public class Singleton {

    private volatile static Singleton uniqueInstance;

    private Singleton() {
    }

    public static Singleton getUniqueInstance() {
        if (uniqueInstance == null) {
            synchronized (Singleton.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new Singleton();
                }
            }
        }
        return uniqueInstance;
    }
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JAVA设计模式--学习总结(序)

下一篇:015.4守护线程和join