单例模式Singleton
是一种创建型模式,指某个采用Singleton
单例模式,则这个类在同一个
JVM上,只能产生一个实例供外部访问,并且仅提供一个全局的访问方式。
懒汉式线程不安全
public class Singleton1 {
private static Singleton1 instance;
// 构造方法私有化!!!
private Singleton1() {};
public static Singleton1 getInstance() {
if(instance == null) {
instance = new Singleton1();
}
return instance;
}
}
饿汉式线程安全
public class Singleton2 {
private static final Singleton2 instance = new Singleton2();
// 构造方法私有化
private Singleton2() {};
public static Singleton2 getInstance() {
return instance;
}
}
全局锁
public class Singleton3 {
private static Singleton3 instance;
// 构造方法私有化
private Singleton3() {};
// 通过synchronized添加全局锁实现线程安全
public static synchronized Singleton3 getInstance() {
if (instance == null) {
instance = new Singleton3();
}
return instance;
}
}
静态代码块
public class Singleton4 {
private static final Singleton4 instance;
// 静态代码块创建单例对象
static {
instance = new Singleton4();
}
// 构造方法私有化
private Singleton4(){}
public static Singleton4 getInstance() {
return instance;
}
}
双重校验锁
public class Singleton5 {
private static Singleton5 instance;
private Singleton5() {
}
public static Singleton5 getInstance() {
if (instance == null) {
synchronized (Singleton5.class) {
if (instance == null) {
instance = new Singleton5();
}
}
}
return instance;
}
}
静态内部类
public class Singleton6 {
// 构造方法私有化
private Singleton6() {};
// 静态内部类
private static class SingletonHolder{
// 创建单例对象
private static Singleton6 instance = new Singleton6();
}
public static Singleton6 getInstance() {
return Singleton6.SingletonHolder.instance;
}
}
静态枚举类
public class Singleton7 {
private Singleton7() {}
// 内部枚举类
enum SingletonEnum{
INSTANCE;
// 单例对象
private Singleton7 instance;
private SingletonEnum() {
instance = new Singleton7();
}
private static Singleton7 getInstance() {
return SingletonEnum.INSTANCE.instance;
}
}
}