设计模式
一、单例
保证一个类 只有一个实例,并提供一个全局访问点。
需要私有化构造方法
private Singleton(){
}
1、饿汉
private static final Singleton INSTANCE = new Singleton();
2、懒汉
- 双检锁
// volatile 可以保证可见性,禁止指令重排
private static volatile Singletion instance;
public static Singleton getInstance(){
if(instance == null){
synchronized (Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
- 同步方法
private static Singletion instance;
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
- 静态内部类,即实现了延迟加载,也保证了线程安全。
类的加载和初始化是分开进行的,且初始化发生在类首次使用时。静态内部类
SingletonHolder 被加载并初始化的时刻是在其包含的静态成员被访问
时。
JVM 的类初始化机制
- 懒加载
- 线程安全:类的初始化过程由 JVM 来控制,它保证了多线程之间对于
Singleton实例的唯一性和可见性,且只会执行一次初始化。
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
- 枚举 天然单例
二、原型
浅克隆 深克隆