单例模式确保一个类只有一个实例,并提供一个全局访问点,实现单例模式的方法是私有化构造函数,通过getInstance()方法实例化对象,并返回这个实例
保证在JVM中只有一个实例 幂等
JVM中如何保证实例的幂等问题 保证唯一性
饿汉、懒汉 双重检验
1、单例类只有一个实例
2、共享资源,全局使用
3、节省创建时间,提高性能
缺点:可能存在线程不安全的问题 解决线程安全问题
分别是「饿汉」、「懒汉(非线程安全)」、「懒汉(线程安全)」、「双重校验锁」、「静态内部类」、「枚举」和「容器类管理、静态块初始化
初始化锁LC与之对应;保证一个类的类构造器在多线程环境中被正确的加锁、同步。
注:
public enum Color {
    RED("红色"),
    BLUE("蓝色");
    private final String name;
    Color(String name) {
        this.name = name;
    }
    public void add() {
        System.out.println("method add");
    }
}
public final class Color extends Enum
{
    public static Color[] values()
    {
        return (Color[])$VALUES.clone();
    }
	// 通过名称拿到d
    public static Color valueOf(String name)
    {
        return (Color)Enum.valueOf(com/v8/Color, name);
    }
    private Color(String s, int i, String name)
    {
        super(s, i);
        this.name = name;
    }
    public void add()
    {
        System.out.println("method add");
    }
    public static final Color RED;
    public static final Color BLUE;
    private final String name;
    private static final Color $VALUES[];
	// 枚举类初始化常量,没有无参构造函数
    // VALUES 存放对象
    static 
    {
        RED = new Color("RED", 0, "\u7EA2\u8272");
        BLUE = new Color("BLUE", 1, "\u84DD\u8272");
        $VALUES = (new Color[] {
            RED, BLUE
        });
    }
}