单例模式
定义
保证某个类在全局只有一个实例存在。
代码实现
饿汉模式
class Singleton {
private static Singleton sInstance = new Singleton();
//私有构造方法
private Singleton() {
}
public static Singleton getInstance() {
return sInstance;
}
}借助类加载机制避免了多线程重复创建实例问题,类加载时就进行初始化,没有实现懒加载。
懒汉模式(线程不安全)
实现了延迟初始化,但是多线程访问会重复创建实例。
懒汉模式(互斥锁)
使用互斥锁避免的并发问题,但是由于每次获取实例都要加锁(大部分情况不需要这么做),导致性能较低。
懒汉模式(双重null检查)
既避免了并发问题,又避免了互斥锁写法带来的性能问题。
通过 volatile 关键字禁止指令重排和保证可见性。
静态内部类
只有调用getInstance()方法时才会加载静态内部类并创建静态常量,所以实现了延迟加载;通过类加载机制避免了多线程并发问题。
最后更新于
这有帮助吗?