http://m.nowcoder.com/discuss/35504
    你写的单例模式不一定正确
    双重检查

    1. class Singleton {
    2. private volatile static Singleton instance = null;
    3. private Singleton() {
    4. }
    5. public static Singleton getInstance() {
    6. if (instance == null) {
    7. synchronized (Singleton.class) {
    8. if (instance == null)
    9. instance = new Singleton();
    10. }
    11. }
    12. return instance;
    13. }
    14. }

    //这里为什么要两次if呢?
    //

    1. //假设是这样的,其并发性能会很低
    2. //100个请求拿单例,都要排着队来取。
    3. //如果多加了一层if在instance不为空的情况下,不用考虑并发问题,100个请求很快也能处理完
    4. public static Singleton getInstance() {
    5. synchronized (Singleton.class) {
    6. if(instance==null)
    7. instance = new Singleton();
    8. }
    9. return instance;
    10. }

    singletonObject = new SingletonObject(),这个不是原子操作,它的执行分以下先后三步: 一.给新创建的对象分配内存; 二.调用构造方法初始化成员变量;

    三.将singletonObject指向新对象的内存空间