单例,一个屡见不鲜的面试问题,更是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;

  }

}

其实,能够在里面加入泛型是最好的。。。