美文网首页互联网科技Java 杂谈Java学习笔记
【本人秃顶程序员】Java几种方式实现单例模式之经验总结

【本人秃顶程序员】Java几种方式实现单例模式之经验总结

作者: 本人秃顶程序员 | 来源:发表于2019-01-08 15:05 被阅读1次

    ←←←←←←←←←←←← 快,点关注!

    最近总结了几种单例模式的实现,做个小总结给大家分享一下。

    1、 单例模式,懒汉式,线程安全


    image.png

    2、 单例模式,懒汉式,线程不安全


    image.png

    3、单例模式,饿汉式,线程安全,多线程环境下效率不高


    image.png

    4、单例模式,懒汉式,变种,线程安全


    image.png

    5、单例模式,使用静态内部类,线程安全(推荐)


    image.png

    6、 静态内部类,使用枚举方式,线程安全(推荐)


    image.png

    7、静态内部类,使用双重校验锁,线程安全(推荐)


    image.png

    8、AtomicSingleton 方式既能够保证延迟加载又能保证原子性及实例的唯一性,代码也相对比较简洁


    image.png

    对AtomicReference实现单例的总结:

    AtomicReference是作用是对"对象"进行原子操作。通过源码可以看出,它是通过"volatile"和"Unsafe提供的CAS(比较与交换,Compare and swap,是一种有名的无锁算法函数)实现原子操作。

    这种方式既能够保证延迟加载又能保证原子性及实例的唯一性,代码也相对比较简洁。

    通过并发的学习与使用,线程的阻塞和上下文的切换会带来一定的性能开销,尤其在高并发的环境下。

    而原子变量可以避免优先级倒置和死锁等危险,竞争比较便宜,协调发生在更细的粒度级别,允许更高程度的并发机制等等。

    可以选择这种单例模式,不论从效率和并发方面都高于饿汉试和单汉试
    枚举单例也是不错的选择,但是在4.0之后不在建议使用枚举(相传在性能上胡比较耗费资源)。枚举所开销的内存比其它的单例大。

    写在最后:

    既然看到这里了,觉得笔者写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!

    相关文章

      网友评论

        本文标题:【本人秃顶程序员】Java几种方式实现单例模式之经验总结

        本文链接:https://www.haomeiwen.com/subject/kpzvrqtx.html