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

单例实现方式:

        1.单例装饰器;

        2.使用类;

        3.使用元类            


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

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


调用多线程执行函数:


结果:




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


结果:



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


结果:


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



3.使用元类


结果:


总结:

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,081评论 25 709
  • 见证154群里的姐妹们好:真的感谢主借着这么好的平台建立了这么多的群。有老师,有群主们的鼓励。感谢主借着这些来改造...
    学做智慧女人阅读 181评论 0 0
  • 不知道从什么时候开始 你会学着隔壁奶奶说一口地道的山东话儿 “来来来”说的可纯正了 背着个小手往前走 嘴里还不时蹦...
    Melshow阅读 215评论 0 1
  • 许多人认为感冒不能吃鸡蛋 确实有专家指出少食鸡蛋 才能有利于感冒恢复 其实除了鸡蛋外 这几类食物更要少碰! 感冒能...
    一米阳光xm阅读 150评论 0 0