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

单例实现方式:

1.单例装饰器;

2.使用类;

3.使用元类

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

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

5272091e2fd1

调用多线程执行函数:

5272091e2fd1

结果:

5272091e2fd1

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

5272091e2fd1

结果:

5272091e2fd1

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

5272091e2fd1

结果:

5272091e2fd1

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

3.使用元类

5272091e2fd1

结果:

5272091e2fd1

总结:

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值