高并发下的单例模式
public class ESingleton {
private static volatile ESingleton instance; // 使用 volatile 确保可见性
private ESingleton() {} // 私有构造器
public static ESingleton getInstance() {
if (instance == null) { // 检查①:避免不必要的同步
synchronized (ESingleton.class) { // 加锁
if (instance == null) { // 检查②:确保只有一个线程创建实例
instance = new ESingleton();
}
}
}
return instance;
}
}
虽然通过双重检查锁+volatile相结合的方式能实现高性能、线程安全的单例模式,但是该实现的底层原理比较复杂,写法烦琐。另一种易于理解、编程简单的单例模式的实现为使用静态内部类实例懒汉式单例模式,参考代码如下:
public class Singleton {
//静态内部类
private static class LazyHolder {
//通过final保障初始化时的线程安全
private static final Singleton INSTANCE = new Singleton();
}
//私有的构造器
private Singleton (){}
//获取单例的方法
public static final Singleton getInstance() {
//返回内部类的静态、最终成员
return LazyHolder.INSTANCE;
}
}
使用静态内部类实现懒汉式单例模式只有在getInstance()被调用时才去加载内部类并且初始化单例,该方式既解决了线程安全问题,又解决了写法烦琐问题。

浙公网安备 33010602011771号