定义:确保一个类只有一个实例,并提供一个全局访问点。
单件模式与全局变量:
- 全局变量必须在程序一开始就创建这个变量,如果对象十分耗费资源且这次执行过程中未用得到,则造成了浪费。单件模式可以在需要是创建对象。
- 单件模式用于需要一个对象的情况,例如:线程池,缓存,注册表等。
示例
package singleton;
/**
* Created by zjy on 2017/4/5.
* 双重加锁,首先检查是否创建,如果未检查,进行同步.
*/
public class Singleton {
private volatile static Singleton uniqueInstance;
public static Singleton getInstance(){
if (uniqueInstance ==null){
synchronized (Singleton.class){
if (uniqueInstance ==null){
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
- 采用双重加锁模式,Java5 之后才能用volatile关键字
- 也可以延迟创建实例且只同步 getinstance方法,不过性能不佳
- 也可以急切实例化,可是就直接创建实例。
- 如果使用多个类加载器,可能会导致多个实例单例模式失效。