高并发下的单例模式

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()被调用时才去加载内部类并且初始化单例,该方式既解决了线程安全问题,又解决了写法烦琐问题。

posted @ 2025-04-23 13:53  紫川先生  阅读(17)  评论(0)    收藏  举报