在一次面试的笔试中有一道(设计模式)题:请写一个简单的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;
}
}
写下来给自己个提醒:错误的不止是少些了代码,而是不细心。
希望路过的不要再发生类似错误!!!