美文网首页
单例模式,你可能不知道秘密

单例模式,你可能不知道秘密

作者: 拉弓的松鼠在旋转 | 来源:发表于2016-12-05 09:51 被阅读0次

对于单例模式,大家都不会感到陌生,特别是对于经常搞开发的再熟悉不过了。

但是,当你写一个单例的时候,你是否考虑到多线程并发的时候,会出现什么问题???

单例模式无非都是私有化的访问:

/*

* GZYY    2016-12-5  上午9:17:44

* author: zsz

*/

public class Singleton {

private static Singleton singleton;

public static Singleton getInstance() {

if (singleton == null) {

singleton = new Singleton();

}

return singleton;

}

}

相信这是大家写单例经常用的方法,那么对于在多线程并发的时候呢?

在讲之前首先要知道singleton = new Singleton()在编译的时候做了什么内容:

1:给Singleton的实例分配内存

2:调用Singletion的构造函数,初始化成员字段

3:将singleton对象指向分配的内存空间(此时的singleton就不为空了)

虽然逻辑上是这样走的路线,但是单一线程走的路线会出现重排序的情况(重排序:执行的顺序可能是乱的,但最终的结果是一样的),那么当我这个实例化的线程跑到一半的时候,cpu的资源被其他相关线程调用实例化的时候抢了,这不就gg了么!!

解决的办法有两个:

1:一种是使用synchronized关键字

public static Singleton getInstance() {

if (singleton == null) {

synchronized (Singleton.class) {

if (singleton == null) {

singleton = new Singleton();

}

}

}

return singleton;

}

2:另一种是通过内部静态类来获取

public class Singleton {

private static Singleton singleton;

public static Singleton getInstance() {

return SingletonHolder.mSingleton;

}

private static class SingletonHolder {

private static final Singleton mSingleton = new Singleton();

}

}

相关文章

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • 单例模式,你可能不知道秘密

    对于单例模式,大家都不会感到陌生,特别是对于经常搞开发的再熟悉不过了。 但是,当你写一个单例的时候,你是否考虑到多...

  • Node.js与单例模式

    1、前端的JavaScript单例模式 单例模式是非常常用的设计模式,前端的JavaScript中单例模式代码可能...

  • 你真的会写单例吗?

    你真的会写单例吗? 摘录来源 单例的正确姿势 Java单例模式可能是最简单也是最常用的设计模式,一个完美的单例需要...

  • 设计模式之单例模式

    对于单例模式,我想大家并不陌生,因为它是我们代码编写中比较常用的设计模式之一。 不过,大家可能不知道的是,单例模式...

  • Android中的设计模式—单例模式

    单例模式介绍 单例模式是应用最广的模式之一,也可能是很多人唯一会使用的设计模式。在应用单例模式时,单例对象的类必须...

  • 设计模式

    手写单例模式(线程安全) 你知道几种设计模式?单例模式是什么?Spring中怎么实现单例模式?

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 设计模式(一):单例模式

    2018年9月11日 今天在imooc看了《模式的秘密---单例模式》,写一下自己的理解。 什么是单例模式 在某些...

网友评论

      本文标题:单例模式,你可能不知道秘密

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