单例模式确保一个类只有一个实例,并提供一个全局访问点,实现单例模式的方法是私有化构造函数,通过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
});
}
}