1 饿汉式(静态变量方式)
/**
* 饿汉式
* 类加载的时候完成实例化,线程安全
* @Date 2022-02-24 11:38
*/
public class HungaryHanStyle {
private static HungaryHanStyle instance = new HungaryHanStyle();
private HungaryHanStyle() {
}
public static HungaryHanStyle getInstance() {
return instance;
}
}
2 饿汉式(静态代码块方式)
/**
* 饿汉式
* 类加载的时候完成实例化,线程安全
* @Date 2022-02-24 11:38
*/
public class HungaryHanStyle {
private static HungaryHanStyle instance ;
{
instance= new HungaryHanStyle()
}
private HungaryHanStyle() {
}
public static HungaryHanStyle getInstance() {
return instance;
}
}
3懒汉式(线程安全)
/**
* 1分配内存空间
* 2 初始化对象
* 3 将对象指向刚分配的内存空间
* volatile 避免 2和3 指令重排序
* @Date 2022-02-24 11:42
*/
public class LazyStyle {
private static volatile LazyStyle instance;
private LazyStyle() {
}
public static LazyStyle getInstance() {
if (instance == null) {
synchronized (LazyStyle.class) {
if (instance == null) {
instance = new LazyStyle();
}
}
}
return instance;
}
}
4懒汉式(静态内部类方式)
/**
* 静态内部类是
* 实现懒加载、线程安全,而且JVM还保持了指令优化的能力。
*
* @Date 2022-02-24 14:06
*/
public class InnerStyle {
private InnerStyle() {
}
private static class InnerSingleton {
private static final InnerStyle instance = new InnerStyle();
}
public static InnerStyle getInstance() {
return InnerSingleton.instance;
}
}
5 枚举
public enum EnumStyle {
INSTANCE;
}
6.jdk 应用
runtime 饿汉式