在一次面试的笔试中有一道(设计模式)题:请写一个简单的singletion程序;
我的回答:
public class Demo{
private static Demo demo = null;
private synchronized static Demo getInstance(){
if(demo==null){
demo = new Demo();
}
return demo;
}
}
本来感觉挺好的,但过后一想竟然犯了一个严重之极的错误:
public class SingletonDemo { // volatile 防止DCL JIT重排序导致错误 private volatile static SingletonDemo singletonDemo = null; private SingletonDemo(){}; // default constructor not definition up to private private SingletonDemo getInstance() { if (singletonDemo == null) { synchronized (this) { if(singletonDemo == null){ singletonDemo = new SingletonDemo(); } } } return singletonDemo; } }
写下来给自己个提醒:错误的不止是少些了代码,而是不细心。
希望路过的不要再发生类似错误!!!