6.单例模式-懒汉式-双重检查

2019-11-18  本文已影响0人  测试员

步骤

1)单利模式 防止其他类中new,所以private修饰
2)类中创建对象----但是要在静态代码块中创建【并且用volatail修饰】
3)对外提供一个静态方法来创建对象【这一步要使用懒加载,并且双重验证保证多线程安全】

优点

线程安全;
延迟加载;
效率较高;

缺点

没有缺点,至于今天依然相对完美【2019.11.18】

代码实现

(实际开发就用它就完事了)

package yuan.com.dp.singleton;

/**
 * 测试类 其实应该用多线程来测试的这里测试 毫无意义,有点强迫症的感觉。
 */
class Test_SingleTon_5 {
    public static void main(String[] args) {
        SingleTon_5 ton_1 = SingleTon_5.getSingleTon_5();
        SingleTon_5 ton_2 = SingleTon_5.getSingleTon_5();
        System.out.println(ton_1 == ton_2);
    }
}
/**
 * 单利模式-懒汉式-双重检查
 */
public class SingleTon_5 {
    /**
     * 1.单利模式 防止其他类中new,所以private修饰
     */
    private SingleTon_5() {
    }


    /**
     * 2.类中创建私有对象volatile修饰
     */
    private static volatile SingleTon_5 singleTon_5 = null;

    /**
     * 3.对外提供一个静态方法来创建对象
     *
     * @return singleTon_5实例
     * 相较于前一版多加了个synchronized
     */
    public static SingleTon_5 getSingleTon_5() {
        //非常优秀的逻辑处理,解决了多线程问题的同时又一定程度上解决了安全问题。
        if (singleTon_5 == null) {
            synchronized (SingleTon_5.class){
                if(singleTon_5 == null){
                    singleTon_5 = new SingleTon_5();
                }
            }
        }
        return singleTon_5;
    }
}


上一篇下一篇

猜你喜欢

热点阅读