单例,一个屡见不鲜的面试问题,更是Java(其实不仅仅是Java)的基础问题。但依然有很多人不能写出一个完完整整的例子。
最为常见的错误:
public class Singleton{
public static Singleton demo;
public static Singleton getSingleton(){
if(demo==null) demo = new Singleton();
return demo;
}
}
错误有两点:
A:构造方法没有私有化,在其它类中依然可以使用new关键字来创建对象;
B:get方法没有同步,或者说没有加锁,无法确保只有一个对象。
完整的例子:
public class Singleton{
public static Singleton demo;
private Singleton(){}
public static synchronized Singleton getSingleton(){
if(demo==null) demo = new Singleton();
return demo;
}
}
其实,能够在里面加入泛型是最好的。。。