由于加了一个线程安全的锁,锁住的是这个类,而不是对象,当多个线程运行时,第一个线程能够获得单例的对象,后面的线程由于类被锁住将不能够调用到该类的这个静态方法,将会出错。将锁去了就不会有问题了
代码规范,singleton应该命名成instance.
singleton应该声明成volatile。否则第二次判断是否为null的结果永远都与第一次相同。