单例模式是一种设计模式,分为懒汉式和饿汉式两种实现方式
**
饿汉式实现
public class Singleton {
private final static singleton instance = new Singleton(); // 饿汉式直接new出对象,因为是final对象,就是在类装载的时候就完成实例化。避免了线程同步问题
private Singleton(){}
public static Singleton getInstance()`{ // 静态的
return instance;
}
优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。
缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。
懒汉式实现(多线程情况下不安全)
**public clsss singleton {
private static Singleton singleton; // 声明一个null对象
private Singleton() {}
public static Singleton getInstance() {
if(singleton == null) {
singleton = new Singleton(); // 懒汉式获取getInstance是new对象
}
return singleton;
}
}
**
懒汉式实现(线程安全,双重检验锁)
**public class Singleton {
private static volatile Singleton singleton; // 设置可见
private Singleton() {}
public static Singleton getInstance() {
if(singleton==null) { // 一次检验
synchronized(Singleton.class){
if(signleton == null) { // 两次检验
singleton = new Singleton();
}
}
}
}
}
}