首页 > 其他分享 >多开中多线程,每个线程使用一个单例

多开中多线程,每个线程使用一个单例

时间:2023-11-30 18:01:31浏览次数:23  
标签:__ threadName 实例 线程 单例 多线程 id

def singleton(cls):
    threadNames = []  # 线程名称列表
    instances = {}  # 实例字典

    def get_instance(threadName, *args, **kwargs):
        """
        获取单例实例,通过线程名创建单例,保障每个线程里面的实例保持一致

        参数:
        - threadName: 线程名称

        返回:
        - instances[cls]: 单例实例
        """
        if threadName not in threadNames:  # 如果线程名称不在线程名称列表中
            instances[cls] = cls(threadName,*args)  # 实例字典中存储类的实例
            threadNames.append(threadName)  # 将线程名称添加到线程名称列表中
        return instances[cls]  # 返回实例字典中存储的类的实例

    return get_instance  # 返回get_instance函数


@singleton
class threadNameSingleton:
    def __init__(self,threadName,*args):
        print(f"{threadName} 单例创建成功")


if __name__ == '__main__':
    pc1 = threadNameSingleton("pc1")
    pc11 = threadNameSingleton("pc1")
    # print(threadNames)
    pc2 = threadNameSingleton("pc2")
    pc22 = threadNameSingleton("pc2")
    # print(threadNames)

    print(id(pc1), id(pc11))
    print(id(pc1), id(pc2))
    print(id(pc2), id(pc22))

 

标签:__,threadName,实例,线程,单例,多线程,id
From: https://www.cnblogs.com/zwnsyw/p/17867937.html

相关文章

  • ThreadPoolExecutor线程池内部处理浅析
    我们知道如果程序中并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束时,会因为频繁创建线程而大大降低系统的效率,因此出现了线程池的使用方式,它可以提前创建好线程来执行任务。本文主要通过java的ThreadPoolExecutor来查看线程池的内部处理过程。1ThreadPoolExec......
  • java线程池管理工具类
    1,这是线程池管理工具类,在系统关闭时确保任务执行完毕,自定义线程名字,自定义抛弃策略默认使用了CallerRunsPolicy拒绝策略importjava.util.concurrent.ExecutorService;importjava.util.concurrent.LinkedBlockingQueue;importjava.util.concurrent.ThreadFactory;importja......
  • Qt主线程和子线程协作更新UI
    一、概述现有一个需求:Qt+OpenCV执行角点检测。使用Qt当做UI界面进行角点检测。我们知道像角点检测这种算法需要大量的计算,是比较耗时的一个操作。如果把计算+UI显示全放入主线程中计算,那么UI界面有可能就会卡主,进而出现应用程序无响应的情况。要求:使......
  • jdk21-虚拟线程
    jdk文档:https://openjdk.org/jeps/444关键内容整理虚拟线程是轻量级线程,可显著减少编写、维护和观察高吞吐量并发应用程序的工作量。默认情况下,直接使用API创建的虚拟线程(而不是通过创建的虚拟线程)现在也会在其整个生命周期内受到监视,并且可以通过观察虚拟线程部分......
  • 实验7:单例模式
     本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图;2.提交源代码;3.注......
  • 主线程如何获取子线程异常
    主线程如何获取子线程异常常规情况:一般我们没有办法通过主线程去获取子线程的异常举个例子:publicclasstest11_29{publicstaticvoidmain(String[]args){try{Threadthread=newThread(newmyExceptionRunner());thread.star......
  • 发烧平台完全是AMD的天下!32核心线程撕裂者者7970X评测:内容创作性价比之选
    一、前言:32核心的线程撕裂者7970X11月20日,AMD正式发布了Zen4架构的线程撕裂者处理器,成为了无可争议的最强处理器,我们快科技也同步带来了HEDT发烧平台旗舰型号,64核心128线程线程撕裂者7980X的首发评测。除了线程撕裂者7980X之外,AMD同时还发布了32核心的线程撕裂者7970X、24核心......
  • 线程池
    线程池线程池简介线程池(threadpool):一种线程的使用模式。线程过多会带来调度的开销,进而影响局部和整体性能。而线程池维护多个线程,等待着监督管理者分派并发执行的任务。这避免了在处理短时间任务时创建和销毁线程的代价。线程池不仅能够保证内核的充分使用,还能防止过分调度线......
  • ElasticSearch之线程池
    ElasticSearch节点可用的CPU核的数量,通常可以交给ElasticSearch来自行检测和判定,另外可以在``elasticsearch.yml`中显式指定。样例如下:node.processors:2如下表格中的processors即CPU核的数量。线程池的列表线程池名称类型线程数量队列长度用途genericscaling......
  • 设计模式之-单例模式
    1、是什么?单例模式是一种常用的软件设计模式,它在一个类中只允许创建一个对象实例,并且提供一个全局访问点来访问该实例。2、怎么玩?单例模式需要满足三个条件:单例类只能有一个实例;单例类必须自己创建自己的唯一实例;单例类必须给所有其他对象提供这一实例。(1)懒汉式packageco......