单例模式保证了全局有且并有一个对象,并且可以在全局访问
经典场景:图片的缓存LruChache、数据库访问对象、工具类
常见的单例有懒汉
和饿汉
模式。
**饿汉模式**:就是在程序一开始的时候就进行了初始化,一般是采用一个静态内部类。
**懒汉模式**:就是在使用它的时候才进行初始化,这里需要考虑一下线程安全问题
饿汉模式
静态变量模式
public class Singleton {
private final static Singleton INSTANCE = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
静态代码块模式
public class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {}
public Singleton getInstance() {
return instance;
}
}
饱汉模式
双重锁模式
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
//双重锁可以防止多次初始化,这样会比锁加在了方法上效率要高
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
静态内部类模式
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
网友评论