一、饿汉式
说明:饿汉模式就是在jvm进程启动并在我们主动使用该类的时候就会在内存中初始化一个对象实例,然后在我们主动调用getInstance()方法的时候直接返回这个对象实例,因此对象的创建是在调用getInstance之前。
/**
* 饿汉式
*/
public class Singleton {
// 1. 私有化构造器
private Singleton() {
}
private static Singleton singleton = new Singleton();
public static Singleton getInstance() {
return singleton;
}
}
/**
* 懒汉式
*/
public class Singleton2 {
private Singleton2() {
}
private static Singleton2 singleton;
public static Singleton2 getInstance() {
if (singleton == null) {
singleton = new Singleton2();
}
return singleton;
}
}
基本的单例模式(非线程安全):
线程安全的单例模式:
/**
* 双重检验锁
*/
public class Singleton3 {
private Singleton3() {
}
private static Singleton3 instance;
public static Singleton3 getInstance() {
if (instance == null) {
synchronized (Singleton3.class) {
if (instance == null) {
instance = new Singleton3();
}
}
}
return instance;
}
}