如果要保证系统里一个类最多只能存一个实例时,就需要单例模式
1)最简单的单例
2)延迟创建
延迟实例化单例对象(static属性在加载类时就会被初始化),即在第一次使用该类的实例时才实例化
public class UnThreadSafeSingleton{
private static UnThreadSafeSingleton = null;
public static UnThreadSaceSingleton getInstance(){
if(instance==null){
instance = new UnThreadSafeSingleton();
}
return instance;
}
}
此方法不是线程安全的
为了解决这个问题,在此方法上加synchronized关键字,即
public static
synchronized ThreadSafeSingleton getInstance(){....}
上述实现有performance问题,采用下面方法
3)Double-Check Locking
4)Initialization on demand holder
这个也是线程安全的延迟的单例初始化方式
public class lazyLoadedSingleton{
private LazyLoadedSingleton(){}
private static class LazyHolder{ //holds the singleton class
private static final LazyLoadedSingleton singletonInstance = new LazyLoadedSIngleton();
}
public static LazyLoadedSingleton getInstance(){
return LazyHolder.singletonInstance;
}
}
5)Singleton的序列化
单例模式-摘自《漫谈设计模式》
猜你喜欢
转载自xuzhike.iteye.com/blog/1055893
今日推荐
周排行