标签:col static 加载 反射 相对 hold 代码简洁 拷贝 存在
单例模式是指某个类只能被实例化一次,用来表示全局或系统范围的组件,常用于日志记录,工厂,平台组件管理等。单例模式看似简单实际很难。
单例本身有多种实现方法,总体上可分为懒汉模式和饿汉模式两种,懒汉模式相对简单
public class FooSingleton { public final static FooSingleton INSTANCE = new FooSingleton(); private FooSingleton() { } public void bar() { } }
私有构造函数在楼初始化时调用且只调用一次,JVM保证在类完整初始化之后才会被其它多个线程调用。
饿汉模式常见线程安全的实现方式有三种:
public class FooSingleton4 { private FooSingleton4() { } public static FooSingleton4 getInstance() { return FooSingleton4Holder.INSTANCE; } private static class FooSingleton4Holder { private static final FooSingleton4 INSTANCE = new FooSingleton4(); } }
public enum FooEnumSingleton { INSTANCE; public static FooEnumSingleton getInstance() { return INSTANCE; } public void bar() { } }
要想真正实现单例,防止出现多个实例,还要考虑无法单例无法通过clone方法被克隆,无法通过序列化反序列化被拷贝,无法通过反射被重新序列化等。现在一般多推荐采用单例的写法,不仅代码简洁,相对来说也能更好的预防上述问题。
http://www.importnew.com/16995.html
标签:col static 加载 反射 相对 hold 代码简洁 拷贝 存在
原文地址:https://www.cnblogs.com/doit8791/p/8973756.html