一、单例模式
饿汉式(程序启动时就将对象实例化出来)、懒汉式(程序启动时不加载,等需要用到这个对象了再去实例化)
二、懒汉双检锁模式
//代码示例
public class SingleInstance {
//必须有volatile修饰(防止指令重排序)
private volatile static SingleInstance instance;
//构造函数必须私有(防止外部通过构造方法创建对象)
private SingleInstance() {
}
public static SingleInstance getInstance() {
//第一个判空(如果是空,就不必再进入同步代码块了,提升效率)
if (instance == null) {
//这里加锁,是为了防止多线程的情况下出现实例化多个对象的情况
synchronized (SingleInstance.class) {
//第二个判空(如果是空,就实例化对象)
if (instance == null) {
//新建实例
instance = new SingleInstance();
}
}
}
return instance;
}
}
三、饿汉模式
public class SingleTon {
// 惟一的这一个对象
private static SingleTon singleTon = new SingleTon();
private SingleTon() {}
// 调用此方法时,singleTon对象已经产生过了,多线程场景下取回的是同一个单例对象
public static SingleTon getSingleton() {
return singleTon;
}
}