更新時間:2023-12-08 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
當涉及到線程安全的單例模式時,可以使用Python中的線程鎖(threading.Lock())來確保只有一個線程能夠?qū)嵗擃?。以下是一個示例:
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)}")
# 創(chuàng)建多個線程來嘗試獲取單例實例
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__方法來控制實例的創(chuàng)建,確保只有一個實例被創(chuàng)建。_lock是一個 threading.Lock()對象,用于在多線程環(huán)境下保護對_instance的訪問,防止多個線程同時創(chuàng)建實例。