首页常见问题正文

用Python编写一个线程安全的单例模式

更新时间:2023-12-08 来源:黑马程序员 浏览量:

IT培训班

  当涉及到线程安全的单例模式时,可以使用Python中的线程锁(threading.Lock())来确保只有一个线程能够实例化该类。以下是一个示例:

import threading

class Singleton:
    _instance = None
    _lock = threading.Lock()

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            with cls._lock:
                if not cls._instance:
                    cls._instance = super().__new__(cls)
        return cls._instance

# 示例用法
def create_singleton_instance():
    singleton_instance = Singleton()
    print(f"Singleton instance ID: {id(singleton_instance)}")

# 创建多个线程来尝试获取单例实例
threads = []
for _ in range(5):
    thread = threading.Thread(target=create_singleton_instance)
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

  这个示例中,Singleton类使用__new__方法来控制实例的创建,确保只有一个实例被创建。_lock是一个 threading.Lock()对象,用于在多线程环境下保护对_instance的访问,防止多个线程同时创建实例。

分享到:
在线咨询 我要报名
和我们在线交谈!