码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式总结

时间:2016-11-13 13:40:08      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:指令重排序   zed   mem   gets   log   初始化   ret   伪代码   总结   

(1)双重校验锁

public class Singleton {
    private volatile static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {
    if (singleton == null) {
        synchronized (Singleton.class) {
        if (singleton == null) {
            singleton = new Singleton();
        }
        }
    }
    return singleton;
    }
}

1)构造函数和对象私有化

2)对象用violate和static关键字修饰

3)公有的静态获取对象方法

4)双重校验锁

violate关键字作用:防止指令重排序

创建对象可以分解为如下的3行伪代码

memory=allocate(); //1:分配对象的内存空间

ctorInstance(memory); //2:初始化对象

instance=memory; //3:设置instance指向刚分配的内存地址

上面3行代码中的2和3之间,可能会被重排序导致先3后2

(2)静态内部类

public class Singleton {
    private static class SingletonHolder {
    private static final Singleton INSTANCE = new Singleton();
    }
    private Singleton (){}
    public static final Singleton getInstance() {
    return SingletonHolder.INSTANCE;
    }
}

1)对象用static和final修饰

2)对象由静态类包裹

 

单例模式总结

标签:指令重排序   zed   mem   gets   log   初始化   ret   伪代码   总结   

原文地址:http://www.cnblogs.com/shinning/p/6058372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!