单件模式下:一个类只能有一个对象(实例),并提供一个全局访问点
单例与全局静态变量区别
全局比那里基本上就是对对象的静态引用
全局静态变量是急切实例化,单例是延迟实例化
全局遍历不能保证只有一个实例
简单单例:
class Singleton{
private static Singleton sigleton;
private Sigleton(){}
public static Singleton getInstance(){
{
return singleton;
}
}
多线程并发时会出现创建多个实例的问题
解决的三种方式,
1,synchronized同步,getInstance()方法
2,急切实例化
3,双重检查加锁,性能最优
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();
}
}
}
}
}