singleton(单例)模式

我们在开发中,要说最常用的设计模式肯定就是单例模式了,顾名思义单例模式就是一个实例。那么我们来写一个单例模式的例子


singleton(单例)模式_第1张图片

或许很多人才接触写单例模式就是如此,但是考虑到多线程并发,我们想到了synchronized。可以得到


singleton(单例)模式_第2张图片

似乎看来挺完美了,但是当第一个线程执行完后同步代码块以后,第二个线程开始执行,他不会再次判断 singleten==null ,所以想到双重校验锁


singleton(单例)模式_第3张图片

到了这一步 ,在我看来已经挺完美了 , 但是实际上问题总会有的

因为指令重排序的原因 ,可能造成 第二个线程执行的时候 new Singleton();初始化并没有完全完成 , 导致线程2 引用的对象不完整,解决如下 或者使用volatile关键字


singleton(单例)模式_第4张图片

当我们在实例化对象的时候可能需要上下文,当我们使用单例模式的时候加入传入的是activity时,那么就有可能造成内存泄露,所以此处mark一下,写代码的时候需注意。

单例模式写法常常分两种,简单的说:

懒汉式:直到你用我,我才实例化

恶汉式:不管你用不用,我先实例化在这放着



你可能感兴趣的:(singleton(单例)模式)