单例模式的核心思想
单例模式确保一个类只有一个实例,并提供一个全局访问点。这在需要控制资源访问(如配置文件、数据库连接等)时非常有用。
一个简单的示例:
import threading
import time
class Singleton:
instance = None
lock = threading.RLock() # 加锁(递归锁)防止并发创建新对象
def __init__(self, name):
self.name = name
def __new__(cls, *args, **kwargs):
if cls.instance:
return cls.instance
# 加锁
with cls.lock:
time.sleep(0.5)
if cls.instance:
return cls.instance
cls.instance = object.__new__(cls) # 创建空对象
return cls.instance
# obj1 = Singleton('obj1')
# print(obj1)
# obj2 = Singleton('obj2')
# print(obj2)
def task():
obj = Singleton('x')
print(obj)
for i in range(10):
t = threading.Thread(target=task)
t.start()
"""
输出:
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
"""