一种单例处理方法和装置制造方法及图纸

技术编号:34137731 阅读:15 留言:0更新日期:2022-07-14 17:02
本发明专利技术公开了一种单例处理方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:响应于对获取单例的程序的调用操作,根据调用操作中的类名,查询单例管理者中是否存在相应的单例对象;若查询结果为存在,则将单例对象作为调用操作结果并返回;若查询结果为不存在,则使用加锁的方式,通过类名创建单例对象,将创建的单例对象作为调用操作结果进行返回,以及将类名和创建的单例对象以键值对的形式存储至单例管理者。该实施方式通过设置单例管理者,通过线程加锁的方式对单例进行读写操作,避免频繁使用dispatch_once方式造成的线程死锁问题,全局只有一份创建单例的代码,并且提供了移除单例的程序,使得开发者使用更加方便快捷。方便快捷。方便快捷。

【技术实现步骤摘要】
一种单例处理方法和装置


[0001]本专利技术涉及计算机
,尤其涉及一种单例处理方法和装置。

技术介绍

[0002]目前的单例创建方式有很多种,如单线程单例、synchronized单例、dispatch_once单例,但大多使用dispatch_once方式,而实际操作中有些线程之间存在相互调用问题,该相互调用可能出现线程锁死问题;这种方式创建的单例在整个线程中都只能创建一次,如果释放了在整个线程生命周期中是不能再次创建的,因此现有方式创建的单例不支持释放。

技术实现思路

[0003]有鉴于此,本专利技术实施例提供一种单例处理方法和装置,至少能够解决现有技术中单例频繁使用造成的线程死锁、不支持释放问题。
[0004]为实现上述目的,根据本专利技术实施例的一个方面,提供了一种单例处理方法,包括:
[0005]响应于对获取单例的程序的调用操作,根据调用操作中的类名,查询单例管理者中是否存在相应的单例对象;
[0006]若查询结果为存在,则将所述单例对象作为调用操作结果进行返回;或
[0007]若查询结果为不存在,则使用加锁的方式,调用单例管理者的创建单例程序,以通过所述类名创建单例对象,将创建的单例对象作为调用操作结果进行返回,以及将所述类名和创建的单例对象以键值对的形式存储至单例管理者。
[0008]可选的,所述使用加锁的方式,通过所述类名创建单例对象,包括:
[0009]对单例管理者中用于创建单例对象的代码做加锁处理,以使得多线程的程序在同一时刻仅能通过一个线程创建单例对象;
[0010]基于所述一个线程调用所述代码,以通过所述类名创建单例对象。
[0011]可选的,在所述响应于对获取单例的程序的调用操作之前,还包括:
[0012]创建一个单例作为单例管理者,接收对获取单例的程序的配置操作;以及
[0013]为所有类添加所述获取单例的程序。
[0014]可选的,还包括配置移除单例的程序,所述方法还包括:
[0015]接收传入的待移除类名,响应于单例管理者中存在与所述待移除类型对应的单例对象,调用所述移除单例的程序,以使用加锁的方式对单例对象和所述待移除类名做移除处理。
[0016]可选的,还包括配置移除所有单例的程序,所述方法还包括:
[0017]响应于对所述移除所有单例的程序的调用操作,使用加锁的方式,对单例管理者中的所有单例对象和类名做移除处理。
[0018]为实现上述目的,根据本专利技术实施例的另一方面,提供了一种单例处理装置,包
括:
[0019]查询模块,用于响应于对获取单例的程序的调用操作,根据调用操作中的类名,查询单例管理者中是否存在相应的单例对象;
[0020]第一处理模块,用于若查询结果为存在,则将所述单例对象作为调用操作结果进行返回;
[0021]第二处理模块,用于若查询结果为不存在,则使用加锁的方式,调用单例管理者的创建单例程序,以通过所述类名创建单例对象,将创建的单例对象作为调用操作结果进行返回,以及将所述类名和创建的单例对象以键值对的形式存储至单例管理者。
[0022]可选的,所述第二处理模块,用于:
[0023]对单例管理者中用于创建单例对象的代码做加锁处理,以使得多线程的程序在同一时刻仅能通过一个线程创建单例对象;
[0024]基于所述一个线程调用所述代码,以通过所述类名创建单例对象。
[0025]可选的,还包括配置模块,用于:
[0026]创建一个单例作为单例管理者,接收对获取单例的程序的配置操作;以及
[0027]为所有类添加所述获取单例的程序。
[0028]可选的,还包括配置移除单例的程序,所述装置还包括部分单例移除模块,用于:
[0029]接收传入的待移除类名,响应于单例管理者中存在与所述待移除类型对应的单例对象,调用所述移除单例的程序,以使用加锁的方式对单例对象和所述待移除类名做移除处理。
[0030]可选的,还包括配置移除所有单例的程序,所述装置还包括全部单例移除模块,用于:
[0031]响应于对所述移除所有单例的程序的调用操作,使用加锁的方式,对单例管理者中的所有单例对象和类名做移除处理。
[0032]为实现上述目的,根据本专利技术实施例的再一方面,提供了一种单例管理电子设备。
[0033]本专利技术实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的单例处理方法。
[0034]为实现上述目的,根据本专利技术实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的单例处理方法。
[0035]根据本专利技术所述提供的方案,上述专利技术中的一个实施例具有如下优点或有益效果:只有单例管理者的单例是使用dispatch_once方式创建的,其他单例都是通过单例管理者的创建方法创建,不再使用dispatch_once方式,解决了现有创建单例均使用dispatch_once方式导致的线程锁死问题;全局只有一份创建单例的代码,既能减少代码量,又能保证创建单例的代码统一;提供了移除单例的程序,释放后下次使用依旧会重新创建,使开发者使用更加方便快捷。
[0036]上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
[0037]附图用于更好地理解本专利技术,不构成对本专利技术的不当限定。其中:
[0038]图1是根据本专利技术实施例的一种单例处理方法的主要流程示意图;
[0039]图2是根据本专利技术实施例的一具体地单例处理方法的流程示意图;
[0040]图3是根据本专利技术实施例的一种单例处理装置的主要模块示意图;
[0041]图4是本专利技术实施例可以应用于其中的示例性系统架构图;
[0042]图5是适于用来实现本专利技术实施例的移动设备或服务器的计算机系统的结构示意图。
具体实施方式
[0043]以下结合附图对本专利技术的示范性实施例做出说明,其中包括本专利技术实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本专利技术的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0044]目前创建单例方式较多,如单线程、synchronized、dispatch_once。单线程需要保证只有一个实例,因此在第一次访问该实例时才创建,之后访问直接取已经创建好的实例。synchronized,如果两个线程同时调用shareInstanc(即获取单例的程序),可能会创建出2个单例,所以在多线程情况下,需要使用加锁方式。
[0045]使用synchronized虽一定程度上解决了多线程的问题,但并不完美。因为只有在本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种单例处理方法,其特征在于,包括:响应于对获取单例的程序的调用操作,根据调用操作中的类名,查询单例管理者中是否存在相应的单例对象;若查询结果为存在,则将所述单例对象作为调用操作结果并返回;或若查询结果为不存在,则使用加锁的方式,调用单例管理者的创建单例程序,以通过所述类名创建单例对象,将创建的单例对象作为调用操作结果并返回,以及将所述类名和创建的单例对象以键值对的形式存储至单例管理者。2.根据权利要求1所述的方法,其特征在于,所述使用加锁的方式,调用单例管理者的创建单例程序,以通过所述类名创建单例对象,包括:对单例管理者中用于创建单例对象的代码做加锁处理,以使得多线程的程序在同一时刻仅能通过一个线程创建单例对象;基于所述一个线程调用所述代码,以通过所述类名创建单例对象。3.根据权利要求1所述的方法,其特征在于,在所述响应于对获取单例的程序的调用操作之前,还包括:创建一个单例作为单例管理者,接收对获取单例的程序的配置操作;以及为所有类添加所述获取单例的程序。4.根据权利要求3所述的方法,其特征在于,还包括配置移除单例的程序,所述方法还包括:接收传入的待移除类名,响应于单例管理者中存在与所述待移除类型对应的单例对象,调用所述移除单例的程序,以使用加锁的方式对单例对象和所述待移除类名做移除处理。5.根据权利要求3所述的方法,其特征在于,还包括配置移除所有单例的程序,所述方法还包括:响应于对所述移除所有单例的程序的调用操作,使用加锁的方式,对单例管...

【专利技术属性】
技术研发人员:王中文
申请(专利权)人:北京京东世纪贸易有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1