美文网首页
[python笔记] 单例的几种实现方式(线程安全)

[python笔记] 单例的几种实现方式(线程安全)

作者: 猫茂懋 | 来源:发表于2018-04-21 18:47 被阅读0次

    单例实现方式:

            1.单例装饰器;

            2.使用类;

            3.使用元类            


    1.单例装饰器(非线程安全)

        通过装饰器使一个类变成单例类,但是并非线程安全的,多线程状态下,每个线程创建不同的实例,因为没有加线程锁,所以无法阻止其他线程创建新的实例,代码如下:

    调用多线程执行函数:

    结果:


    2.使用类的方式实现单例(非线程安全)

    结果:


    怎么实现单例线程安全,通常做法就是加线程锁:

    结果:

    加了线程锁后,可以实现创建单例线程安全;


    3.使用元类

    结果:

    总结:

            1.不管用什么方式实现单例,其主要逻辑都是判断是否存在已经创建的实例,有就返回已经创建过的实例,没就实例化一个实例并存储起来;

            2.单例在单线程模型下,是线程安全的,不管怎么样创建实例,都有且只有一个,而面对多线程任务时,一般的单例代码无法承担多线程任务,当有io延时操作时,会生成id不同的实例,所以如果需要实现多线程单例,那么就在创建实例时增加线程锁;

            3.实现单例的方式不止三种,只要你抓住if判断的主要逻辑点,就能实现单例,所以单例的实现方式是多种多样的,这里列举了比较常用的三种;

    相关文章

      网友评论

          本文标题:[python笔记] 单例的几种实现方式(线程安全)

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