博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java编程设计模式之完美单例模式
阅读量:4196 次
发布时间:2019-05-26

本文共 1080 字,大约阅读时间需要 3 分钟。

懒汉式:

public class Single {    private static volatile Single instance;    private Single() {}    public static Single getInstance() {        if (instance == null) {            synchronized (Single.class) {                if (instance == null) {                    instance = new Single();                }            }        }        return instance;    }}

解决多线程问题。大名鼎鼎的EventBus中,其入口方法EventBus.getDefault()就是用这种方法来实现的。绝对没有问题,不过,

非要挑点刺的话还是能挑出来的,就是这个写法有些复杂了,不够优雅、简洁。

饿汉式:

public class Singleton {    private static class SingletonHolder {        private static final Singleton INSTANCE = new Singleton();    }    private Singleton (){}    public static final Singleton getInstance() {        return SingletonHolder.INSTANCE;    }}

《Effective Java》

这种写法非常巧妙:

1.对于内部类SingletonHolder,它是一个饿汉式的单例实现,在SingletonHolder初始化的时候会由ClassLoader来保证同步,使INSTANCE是一个真·单例。

2.同时,由于SingletonHolder是一个内部类,只在外部类的Singleton的getInstance()中被使用,所以它被加载的时机也就是在getInstance()方法第一次被调用的时候。

3.它利用了ClassLoader来保证了同步,同时又能让开发者控制类加载的时机。从内部看是一个饿汉式的单例,但是从外部看来,又的确是懒汉式的实现。

简直是神乎其技。

文章是从这里看的,不错,个人直接把好理解的完美方法粘了出来,以备使用,原理可查看原文

转载地址:http://ynzli.baihongyu.com/

你可能感兴趣的文章
JavaScript基础教程之flag的用法
查看>>
JavaScript基础教程之JS函数中对this的疑惑与不解
查看>>
JavaScript基础教程之querySelectorAll( )方法遇到的问题
查看>>
《JavaScript高级程序设计》学习笔记(一)JavaScript简介
查看>>
JavaScript基础教程之字符串对象
查看>>
JavaScript基础教程之数学对象
查看>>
JavaScript基础教程之数组对象
查看>>
《JavaScript高级程序设计》学习笔记(三)基本概念
查看>>
关于bootstrap-table冻结列生成多个冻结表头和表格主体的问题
查看>>
《CSS世界》学习笔记(一)
查看>>
swiper组件如何自定义分页符和前进后退按钮
查看>>
jQuery中attr()与prop()的区别
查看>>
spring JPA动态查询
查看>>
Node.js 学习笔记(一)
查看>>
U3D框架搭建(一):订阅者模式
查看>>
U3D使用:带有骨骼信息的节点无法旋转、位移
查看>>
C#使用的一些小技巧
查看>>
addbehaviour 的无法执行
查看>>
七,laya发布的问题
查看>>
游戏引擎学习阶段总结
查看>>