这是必须会的,经常用在属性管理器,Runtime对象。
延迟实例化(懒汉) <--- 双重检查加锁
急切实例化(饿汉)
有状态和无状态 (分散式系统中)
public class Singleton{
private Singleton(){}
private static SingletonuniqueInstance = new Singleton();
public static SingletongetInstance(){
return uniqueInstance;
}
}
单件模式——确保一个类只有一个实例,并提供一个全局访问点
1. 同步一个方法可能造成程序执行效率下降100倍,所以不考虑synchronized getInstance
2. 急切创建单件,使创建和运行时方面的负担不太繁重
“双重检查加锁”
public class Singleton{
private Singleton(){}
private volatile staticSingleton uniqueInstance;
public static SingletongetInstance(){
if(uniqueInstance == null){
synchronized(Singleton.class){
if(uniqueInstance == null){
uniqueInstance
= new Singleton();
}
}
}
return uniqueInstance;
}
}
注意:
1. 全局变量比单件模式差:全局变量不能确保只有一个实例
2. 单件类不能当成超类,因为构造器私有