Java线程安全单例模式实现

一般来说,单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。所说都是线程安全的实现。
一般情况下直接使用饿汉式就好了,如果明确要求要懒加载(lazy initialization)会倾向于使用静态内部类,如果涉及到反序列化创建对象时会试着使用枚举的方式来实现单例。

懒汉式
public final class Singleton {

    private static Singleton instance;

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        synchronized (Singleton.class) {
            if(instance == null) {
                instance = new Singleton();
            }
        }
        return instance;
    }
}
双重检验锁
public final class Singleton {

    //用volatile修饰对象,禁止指令重排序优化
    private volatile static Singleton instance; 

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        if(instance == null) {
            synchronized (Singleton.class) {
                if(instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
饿汉式
public final class Singleton {

    //类加载时就初始化
    private static final Singleton instance = new Singleton();

    private Singleton() {
        //
    }

    public static Singleton getInstance() {
        return instance;
    }
}
静态内部类
public final class Singleton {

    private Singleton() {
        //
    }

    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
枚举
public enum EnumSingleton {

    INSTANCE;

    private EnumSingleton() {

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 读取配置文件的内容## 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相...
    七寸知架构阅读 11,784评论 12 68
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 9,859评论 4 34
  • 一、前言 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为...
    manimaniho阅读 3,184评论 0 0
  • 什么是单例模式 什么是单例模式呢? 我们引用一下维基百科: 单例模式,也叫单子模式,是一种常用的软件设计模式。在应...
    莫那一鲁道阅读 6,514评论 0 5
  • 感恩日记: 1.今天回到学校宿舍很惊喜地发现公用厕所被打扫得很干净,真的超棒的。感谢为大家服务的好心人。想想能为别...
    Betty丽丽阅读 1,540评论 0 2

友情链接更多精彩内容