首页 > 代码库 > 单例模式总结
单例模式总结
即时加载
public class Singleton { private static final Singleton uniqueInstance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return uniqueInstance; } }延时加载——双重检测枷锁
注意volatile关键字
public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() { } public static Singleton getInstance() { if (uniqueInstance == null) { synchronized (Singleton.class) { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } return uniqueInstance; } }延时加载——内部静态类
内部静态类在第一次被引用时加载,是线程安全的
public class Singleton { private Singleton() { } public static Singleton getInstance() { return Nested.uniqueInstance; } static class Nested { private static final Singleton uniqueInstance = new Singleton(); } }单例模式序列化
注意实现readResolve方法,并且所用带有对象引用的实例域都必须声明为transient,详见《Effective Java》第77条。
import java.io.Serializable; public class Singleton implements Serializable { private static final Singleton uniqueInstance = new Singleton(); private transient String element = "singleton"; private Singleton() { } public static Singleton getInstance() { return uniqueInstance; } private Object readResolve() { return uniqueInstance; } }枚举类
单例的最佳实现方法,提供序列化机制,防止多次实例化,并且线程安全。
public enum Singleton { INSTANCE; // elements & methods }
单例模式总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。