首页> 中国专利> 一种通用多线程任务执行方法、装置、介质及设备

一种通用多线程任务执行方法、装置、介质及设备

摘要

本发明公开了一种通用多线程任务执行方法,包括,根据多线程并发任务中的共性代码,抽象出通用多线程任务执行接口以及通用多线程任务执行器;通过多线程通用任务执行接口导入至少一个应用的多个工作任务,得到每一个应用的工作任务集合,并设置执行多个工作任务所需的线程数,配置执行多个工作任务所需的公共任务执行工作器;利用通用多线程任务执行器根据多个工作任务所需的线程数,对工作任务集合进行拆分得到至少一个工作任务子集合;利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务,得到每个工作任务子集合的工作任务返回值。本发明的应用在绝大部分java开发环境、场合都可以通用,降低了人力成本,缩短了软件开发周期,降低维护成本。

著录项

  • 公开/公告号CN113110924A

    专利类型发明专利

  • 公开/公告日2021-07-13

    原文格式PDF

  • 申请/专利权人 北京联创新天科技有限公司;

    申请/专利号CN202110379228.6

  • 发明设计人 郝桃;王毛毛;陆伟;覃克天;

    申请日2021-04-08

  • 分类号G06F9/48(20060101);G06F9/50(20060101);G06F9/52(20060101);

  • 代理机构11862 北京国科程知识产权代理事务所(普通合伙);

  • 代理人曹晓斐

  • 地址 100084 北京市海淀区信息路28号1幢10层1001-16号

  • 入库时间 2023-06-19 11:49:09

说明书

技术领域

本申请涉及软件开发技术领域,特别是一种通用多线程任务执行方法、装置、存储介质及设备。

背景技术

在传统的软件开发过程中,多线程并发任务一般由程序员进行编写,其很多功能都是相似的。

但是由于软件开发人员的水平参差不齐,对多线程的理解不同,各自实现的代码也各式各样,提高了出现bug的风险,而且也提高了定位bug的难度;并且多线程并发任务中一部分实现如按总任务数量、分配到线程执行的任务数、便利执行并发任务等这些代码,每新实现一个多线程功能,这样类似的代码就多复制一份,导致类似、重复代码增加;而且代码实现风格不统一,维护人员维护时,面对风格不一的多线程实现代码,增加了理解维护的难度,也提高了出现错误的几率。

因此如果多线程并发任务继续沿用现有技术由程序员进行编写,会导致开发效率高低不一、代码风格各式各样,进一步导致人力成本增加、开发周期长、维护成本提高等问题。

发明内容

本发明提供一种通用多线程任务执行方法,解决了传统软件开发过程中多线程并发任务由程序员编写导致的开发效率高低不一以及代码风格各式各样的问题,在绝大部分java开发环境、场合都可以通用,进一步降低了人力成本,缩短了软件开发周期,降低维护成本。

为了解决上述问题,本发明采用的一个技术方案是:提供一种通用多线程任务执行方法,该方法包括:

根据多线程并发任务中的共性代码,抽象出多线程并发任务的通用多线程任务执行接口以及通用多线程任务执行器;

通过多线程通用任务执行接口导入至少一个应用的多个工作任务,得到每一个应用的工作任务集合,并设置执行多个工作任务所需的线程数,配置执行多个工作任务所需的公共任务执行工作器;

利用通用多线程任务执行器根据多个工作任务所需的线程数,对工作任务集合进行拆分得到至少一个工作任务子集合;

利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务,得到每个工作任务子集合的工作任务返回值。

本发明采用的另一个技术方案是:提供一种通用多线程任务执行装置,该装置包括:

用于根据多线程并发任务中的共性代码,抽象出多线程并发任务的通用多线程任务执行接口以及通用多线程任务执行器的模块;

用于通过多线程通用任务执行接口导入至少一个应用的多个工作任务,得到每一个应用的工作任务集合,并设置执行多个工作任务所需的线程数,配置执行多个工作任务所需的公共任务执行工作器的模块;

用于利用通用多线程任务执行器根据多个工作任务所需的线程数,对工作任务集合进行拆分得到至少一个工作任务子集合的模块;

用于利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务,得到每个工作任务子集合的工作任务返回值的模块。

本发明技术方案可以达到的有益效果是:本发明提出一种通用多线程任务执行方法,解决了传统软件开发过程中多线程并发任务由程序员编写导致的开发效率高低不一以及代码风格各式各样的问题,在绝大部分java开发环境、场合都可以应用,进一步降低了人力成本,缩短了软件开发周期,降低了维护成本。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一种通用多线程任务执行方法一个具体实施例的示意图;

图2为本发明一种通用多线程任务执行装置另一个具体实施例的示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于被本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

图1所示为本发明一种通用多线程任务执行方法一个具体实施例的示意图。

在该具体实施方式中,通用多线程任务执行方法主要包括:过程S101:根据多线程并发任务中的共性代码,抽象出多线程并发任务的通用多线程任务执行接口以及通用多线程任务执行器;过程S102:通过多线程通用任务执行接口导入至少一个应用的多个工作任务,得到每一个应用的工作任务集合,并设置执行多个工作任务所需的线程数,配置执行多个工作任务的所需公共任务执行工作器;过程S103:利用通用多线程任务执行器根据多个工作任务所需的线程数,对工作任务集合进行拆分得到至少一个工作任务子集合;过程S104:利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务,得到每个工作任务子集合的工作任务返回值。

在图1所示的具体实施方式中,本发明的通用多线程任务执行方法包括过程S101,根据多线程并发任务中的共性代码,抽象出多线程并发任务的通用多线程任务执行接口以及通用多线程任务执行器。此过程通过共性代码实现通用多线程任务执行接口以及通用多线程任务执行器,以便于进一步进行多线程任务执行。

在本发明的一个具体实例中,上述通用多线程任务执行接口在实际操作中可以是根据Java的泛型特性得到的java泛型描述接口,此接口可以适配所有的java业务对象,业务bean,实现通用特性。

在图1所示的具体实施方式中,本发明的通用多线程任务执行方法包括过程S102,通过多线程通用任务执行接口导入至少一个应用的多个工作任务,得到每一个应用的工作任务集合,并设置执行多个工作任务所需的线程数,配置执行多个工作任务所需的公共任务执行工作器。此过程为准备工作任务阶段以及配置阶段,以便于进一步进行多线程任务执行。

在本发明的一个具体实例中,上述通过多线程通用任务执行接口导入至少一个应用的多个工作任务,得到每一个应用的工作任务集合的过程,在实际操作中可以是导入excle记录,也可以是对提单数据进行生成报文申报通关等,具体由工作场景决定。在该具体实例中,例如需要导入应用1与应用2的多个工作任务(excle记录)得到应用1对应的工作任务集合1以及应用2对应的工作任务集合2。

在本发明的一个具体实例中,上述设置执行多个工作任务所需的线程数在实际操作中可以根据应用数量以及工作任务数量进行配置或自定义,在该具体实例中,例如设置的线程数为3。

在本发明的一个具体实例中,上述配置的执行多个工作任务所需的公共任务执行工作器,即executor,应用1与应用2都可以进一步使用executor执行多线程任务。其中,线程池在executor中配置。

在图1所示的具体实施方式中,本发明的通用多线程任务执行方法包括过程S103,利用通用多线程任务执行器根据多个工作任务所需的线程数,对工作任务集合进行拆分得到至少一个工作任务子集合。此过程以便于进一步利用拆分后得到的工作任务子集合进行多线程任务执行。

在本发明的一个具体实例中,上述利用通用多线程任务执行器根据多个工作任务所需的线程数,对工作任务集合进行拆分得到至少一个工作任务子集合的过程包括,根据上述实例可以得知自定义的线程数为3,在该具体实例中,例如在拆分工作任务集合1时,工作任务集合1有100条待处理任务记录,根据线程数分3个子线程去拆分,那么每个工作任务子集合中的工作任务数量应该为工作任务集合1中的待处理任务记录总数除以线程数,将得到的商值取整并加1即为每个工作任务子集合中的工作任务数量,即(100/3)+1=34条,因此对工作任务集合1拆分得到的第一个工作任务子集合取工作任务集合1中待处理任务记录100条中的1-34条,第二个工作任务子集合取工作任务集合1中待处理任务记录100条中的第35-68,共34条记录,第三个工作任务子集合则从第69条开始取34条记录,但实际到100就已经拆分完了,所以第三工作任务子集合为69-100共32条记录。同理,拆分工作任务集合2的过程不作赘述。

在图1所示的具体实施方式中,本发明的通用多线程任务执行方法包括过程S104,利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务,得到每个工作任务子集合的工作任务返回值。此过程以便于充分发挥多核cpu服务器计算性能进行多线程任务执行,并且统一规范多线程任务编码。

在本发明的一个具体实施例中,在上述利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务之前设置缓存锁,此过程通过设置缓存锁异步处理子线程任务以便于保证数据准确性,在应用项目集群环境中保证多线程高并发执行任务时的数据隔离性以及准确性。

在本发明的一个具体实例中,上述利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务之前设置缓存锁的过程包括,例如应用1与应用2的某个工作任务子集合通过executor都配置调度了线程池中的线程1,若不设置缓存锁,会出现应用1的某个工作任务子集合与应用2的某个工作任务子集合同一时刻调度线程1,加大工作任务出错的概率,因此在该具体实例中配置了redis缓存锁。配置redis缓存锁后,应用1的某个工作任务子集合执行线程1时redis缓存锁中线程1的执行状态标志,如果未在执行中,则把执行状态标准设置为执行中,并继续往下执行,此时应用2的某个工作任务子集合执行线程1,读取redis缓存锁中线程1的执行状态标准为执行中,则睡眠等待数秒重新获取执行或是直接跳过执行,直到下一次取到执行状态标准为未执行时,才会往下执行,此缓存锁以便于保证同一时刻只有一个任务在执行操作数据。

在本发明的一个具体实施例中,通用多线程任务执行方法还包括,对工作任务返回值进行统计得到执行结果;其中,执行结果包括执行失败工作任务集合、执行成功工作任务集合、执行失败工作任务集合的数量、执行成功工作任务集合的数量以及错误信息。此过程以便于直观的向开发人员展示执行结果。

在本发明的一个具体实施例中,通用多线程任务执行方法还包括,将每个工作任务子集合的工作任务返回值回写到数据库。此过程以便于将工作任务的执行结果记录在数据库,方便调取。

在本发明的一个具体实例中,上述将每个工作任务子集合的工作任务返回值回写到数据库的过程包括,整个工作任务子集合任务执行完毕后,工作任务子集合中工作任务的执行结果不管是执行成功或执行失败都会记录到相应的执行失败工作任务集合或执行成功工作任务集合,还包括执行失败工作任务集合的数量、执行成功工作任务集合的数量以及错误信息都会被记录,合并所有工作任务子集合的执行失败工作任务集合及执行成功工作任务集合即为应用对应的整个工作任务集合的执行结果,

优选的,根据业务场景可以确定是否需要进一步操作,例如对所有执行失败工作任务集合进行写异常记录,或更新执行成功工作任务集合的状态等。

在本发明的一个具体实施例中,上述将每个工作任务子集合的工作任务返回值回写到数据库的过程包括,在将每个工作任务子集合的工作任务返回值回写到数据库之前设置异步锁。此过程以便于在处于集群环境时,保证数据回写的隔离性以及准确性,同时避免了高并发时产生死锁。

在本发明的一个具体实例中,上述在将每个工作任务子集合的工作任务返回值回写到数据库之前设置异步锁的过程包括,例如应用1与应用2的某个工作任务子集合中工作任务的工作任务返回值同时向数据库回写,若不设置异步锁,会出现应用1的工作任务返回值与应用2的工作任务返回值同一时刻回写到数据库,出现资源争抢,因此在该具体实例中配置了异步锁。配置异步锁后,应用1的工作任务返回值向数据库回写时,应用2的工作任务返回值无法向数据库回写,直至应用1的工作任务返回值数据回写完毕后,应用2的工作任务返回值才可以进行数据回写。

图2所示本发明一种通用多线程任务执行装置一个具体实施方式的示意图。

在图2示出的具体是实施方式中,本发明的通用多线程任务执行装置包括模块201、模块202、模块203以及模块204。

图2示出的模块201,表示的是用于根据多线程并发任务中的共性代码,抽象出多线程并发任务的通用多线程任务执行接口以及通用多线程任务执行器的模块。此模块通过共性代码实现通用多线程任务执行接口以及通用多线程任务执行器,以便于进一步进行多线程任务执行。

图2示出的模块202,表示的是用于通过多线程通用任务执行接口导入至少一个应用的多个工作任务,得到每一个应用的工作任务集合,并设置执行多个工作任务所需的线程数,配置执行多个工作任务所需的公共任务执行工作器的模块。此模块为准备工作任务阶段以及配置阶段,以便于进一步进行多线程任务执行。

图2示出的模块203,表示的是用于利用通用多线程任务执行器根据多个工作任务所需的线程数,对工作任务集合进行拆分得到至少一个工作任务子集合的模块。此模块以便于进一步利用拆分后得到的工作任务子集合进行多线程任务执行。

图2示出的模块204,表示的是用于利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务,得到每个工作任务子集合的工作任务返回值的模块。此模块以便于充分发挥多核cpu服务器计算性能进行多线程任务执行,并且统一规范多线程任务编码。

在本发明的一个具体实施例中,上述用于利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务,得到每个工作任务子集合的工作任务返回值的模块,其还包括模块204-1,用于在利用公共任务执行工作器执行每个工作任务子集合对应的子线程任务之前设置缓存锁的子模块。此模块通过设置缓存锁异步处理子线程任务以便于保证数据准确性,在应用项目集群环境中保证多线程高并发执行任务时的数据隔离性以及准确性。

在本发明的一个具体实施例中,上述通用多线程任务执行装置还包括模块205,用于对工作任务返回值进行统计得到执行结果的模块,其中,执行结果包括执行失败工作任务集合、执行成功工作任务集合、执行失败工作任务集合的数量、执行成功工作任务集合的数量以及错误信息。此模块以便于直观的向开发人员展示执行结果。

在本发明的一个具体实施例中,上述通用多线程任务执行装置还包括模块206,用于将每个工作任务子集合的工作任务返回值回写到数据库的模块。此模块以便于将工作任务的执行结果记录在数据库,方便调取。

在本发明的一个具体实施例中,上述用于将每个工作任务子集合的工作任务返回值回写到数据库的模块,其还包括模块206-1,用于在将每个工作任务子集合的工作任务返回值回写到数据库之前设置异步锁的子模块。此子模块以便于在处于集群环境时,保证数据回写的隔离性以及准确性,同时避免了高并发时产生死锁。

通过本发明通用多线程任务执行装置的应用,解决了传统软件开发过程中多线程并发任务由程序员编写导致的开发效率高低不一以及代码风格各式各样的问题,在绝大部分java开发环境、场合都可以运用,进一步降低了人力成本,缩短了软件开发周期,降低维护成本,同时可以选择设置异步锁与缓存锁,保证在集群环境时数据的隔离性以及准确性,避免了高并发时产生死锁。

本发明提供的一种通用多线程任务执行装置,可用于执行上述任一实施例描述的通用多线程任务执行方法,其实现原理和技术效果类似,在此不再赘述。

在本发明的另一个具体实施方式中,一种计算机可读存储介质,其存储有计算机指令,其特征在于,计算机指令被操作以执行任一实施例描述的通用多线程任务执行方法。其中,该存储介质可直接在硬件中、在由处理器执行的软件模块中或在两者的组合中。

软件模块可驻留在RAM存储器、快闪存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可装卸盘、CD-ROM或此项技术中已知的任何其它形式的存储介质中。示范性存储介质耦合到处理器,使得处理器可从存储介质读取信息和向存储介质写入信息。

处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)、现场可编程门阵列(英文:Field Programmable Gate Array,简称:FPGA)或其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件或其任何组合等。通用处理器可以是微处理器,但在替代方案中,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器还可实施为计算装置的组合,例如DSP与微处理器的组合、多个微处理器、结合DSP核心的一个或一个以上微处理器或任何其它此类配置。在替代方案中,存储介质可与处理器成一体式。处理器和存储介质可驻留在ASIC中。ASIC可驻留在用户终端中。在替代方案中,处理器和存储介质可作为离散组件驻留在用户终端中。

在本发明的一个具体实施方式中,一种计算机设备,其包括处理器和存储器,存储器存储有计算机指令,其中:处理器操作计算机指令以执行任一实施例描述的通用多线程任务执行方法。

在本申请所提供的实施方式中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

以上仅为本申请的实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号