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

单例实现方式:

        1.单例装饰器;

        2.使用类;

        3.使用元类            


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

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


调用多线程执行函数:


结果:




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


结果:



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


结果:


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



3.使用元类


结果:


总结:

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

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

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

你可能感兴趣的:([python笔记] 单例的几种实现方式(线程安全))