-
//内部类实现懒汉式
-
public
class Singleton { -
-
private static class SingletonHolder{ -
//单例变量 -
private static final Singleton newinstance = Singleton(); -
} -
-
//私有化的构造方法,保证外部的类不能通过构造器来实例化。 -
private Singleton() { -
-
} -
-
//获取单例对象实例 -
public static Singleton getInstance() { -
// System.out.println("我是内部类单例!"); -
return SingletonHolder.instance; -
} -
}
懒汉式(避免资源浪费)、线程安全、代码简单。因为方法第一次调用的时候才会被加载(实现了lazy),而且其加载过程是线程安全的(实现线程安全)。内部类加载的时候实例化一次instance。
private static class SingletonHolder
排它锁,只有一个线程可以访问
//下面用枚举方式实现单例
-
public class EnumSingleton{ private EnumSingleton(){} public static EnumSingleton getInstance(){ return Singleton.INSTANCE.getInstance(); } private static enum Singleton{ INSTANCE; private EnumSingleton singleton; //JVM会保证此方法绝对只调用一次 private Singleton(){ singleton = new EnumSingleton(); } public EnumSingleton getInstance(){ return singleton; } } }