首页 > 代码库 > 设计模式:单例
设计模式:单例
- 传统的实现方法:两私一公,涉及线程安全问题(即使有多重检查锁也可以通过反射破坏单例)
public class Singleton {
private volatile static Singleton instance = null;
private Singleton () {
}
public static Singleton getSingleton() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- JDK1.5以前
public class Singleton {
private static class SingletonInstance {
private static final Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getSingleton() {
return SingletonInstance.instance;
}
}
- 目前最为安全的实现单例的方法是通过内部静态enum的方法来实现,因为JVM会保证enum不能被反射并且构造器方法只执行一次。
public class Singleton { private Singleton() {} public static Singleton getInstance() { return SingletonEnum.INSTANCE.getInstance(); } private static enum SingletonEnum { INSTANCE; private Singleton singleton = null; private SingletonEnum() { singleton = new Singleton(); } public Singleton getInstance() { return this.singleton; } } public static void main(String[] args) { Singleton singleton1 = Singleton.getInstance(); Singleton singleton2 = Singleton.getInstance(); System.out.println("singleton1==singleton2? " + (singleton1==singleton2)); } }
设计模式:单例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。