http://m.nowcoder.com/discuss/35504
你写的单例模式不一定正确
双重检查
class Singleton {private volatile static Singleton instance = null;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null)instance = new Singleton();}}return instance;}}
//这里为什么要两次if呢?
//
//假设是这样的,其并发性能会很低//100个请求拿单例,都要排着队来取。//如果多加了一层if在instance不为空的情况下,不用考虑并发问题,100个请求很快也能处理完public static Singleton getInstance() {synchronized (Singleton.class) {if(instance==null)instance = new Singleton();}return instance;}
singletonObject = new SingletonObject(),这个不是原子操作,它的执行分以下先后三步: 一.给新创建的对象分配内存; 二.调用构造方法初始化成员变量;
三.将singletonObject指向新对象的内存空间
