掌桥专利:专业的专利平台
掌桥专利
首页

基于多线程的定时任务运行方法、装置、设备及存储介质

文献发布时间:2023-06-19 09:46:20


基于多线程的定时任务运行方法、装置、设备及存储介质

技术领域

本发明涉及云计算技术领域,尤其涉及一种基于多线程的定时任务运行方法、装置、设备及存储介质。

背景技术

分布式系统是多个处理机通过通信线路互联而构成的松散耦合的系统,分布式系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。

目前,很多公司的管理系统都会在分布式环境下执行定时任务,某管理系统涉及到多台服务器以及多个定时任务,当在某一个时刻服务器需要执行某一项定时任务时,通常有两种执行方式,其中一种是将该定时任务部署到其中一台服务器上进行执行,若服务器出现故障,则无法及时执行该定时任务。另一个方式是在分布式环境下多台服务器执行该定时任务,这种方式会导致该定时任务被重复执行,既浪费资源又降低了处理数据的工作效率。

发明内容

本发明提供了一种基于多线程的定时任务运行方法、装置、设备及存储介质,提高了资源的利用率和处理数据的工作效率。

本发明第一方面提供了一种基于多线程的定时任务运行方法,包括:获取多个定时任务与执行时刻,所述多个定时任务为财务管理系统发出的多个任务;基于每个定时任务读取对应的业务数据量,基于每个业务数据量将对应的定时任务拆分为多个子定时任务;基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号;当目标子定时任务在所述执行时刻被触发时,基于所述多个临时子节点编号和所述数据库锁在多个运行线程中确定目标运行线程;通过所述数据库锁更新所述目标子定时任务的状态为工作状态,并通过所述目标运行线程执行所述目标子定时任务,得到与所述目标子定时任务对应的目标任务数据。

可选的,在本发明第一方面的第一种实现方式中,所述基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号包括:读取预先设置好的数据库锁的名称,得到数据库锁名称,并创建以所述数据库锁名称命名路径的父节点;在所述父节点的路径下创建与每个运行线程对应的临时子节点,并读取每个临时子节点的路径;基于每个临时子节点的路径创建与每个临时子节点对应的临时子节点编号,得到多个临时子节点编号。

可选的,在本发明第一方面的第二种实现方式中,所述当目标子定时任务在所述执行时刻被触发时,基于所述多个临时子节点编号和所述数据库锁在多个运行线程中确定目标运行线程包括:当目标子定时任务在所述执行时刻被触发时,在所述多个临时子节点编号中搜寻最小的临时子节点编号,将所述最小的临时子节点编号确定为目标子节点编号;基于所述目标子节点编号确定对应的运行线程为目标运行线程。

可选的,在本发明第一方面的第三种实现方式中,所述通过所述数据库锁更新所述目标子定时任务的状态为工作状态,并通过所述目标运行线程执行所述目标子定时任务,得到与所述目标子定时任务对应的目标任务数据包括:调整所述数据库锁的记录为工作记录,从而将所述目标子定时任务的状态更新为工作状态;通过所述目标运行线程确定所述目标子定时任务对应的目标数据哈希值;根据所述目标数据哈希值确定与所述目标子定时任务对应的目标任务数据。

可选的,在本发明第一方面的第四种实现方式中,所述通过所述目标运行线程确定所述目标子定时任务对应的目标数据哈希值包括:从所述目标子定时任务中读取目标子定时任务编号,并通过所述目标运行线程在多个预置的数据分区中确定与所述目标子定时任务编号对应的目标数据分区,所述目标子定时任务编号与所述目标数据分区的编号相同;通过所述目标运行线程在所述目标数据分区中确定目标数据键名;基于预置的哈希函数结合所述目标数据键名和所述目标子定时任务的编号计算哈希值,得到目标哈希值。

可选的,在本发明第一方面的第五种实现方式中,在所述获取多个定时任务与执行时刻,所述多个定时任务为财务管理系统发出的多个任务之前,所述基于多线程的定时任务运行方法还包括:在预置的数据库表中增加数据库锁,并读取服务器的线程阈值,基于所述线程阈值创建线程,得到多个运行线程,所述数据库锁用于锁定任务的状态。

可选的,在本发明第一方面的第六种实现方式中,在所述通过所述数据库锁更新所述目标子定时任务的状态为工作状态,并通过所述目标运行线程执行所述目标子定时任务,得到与所述目标子定时任务对应的目标任务数据之后,所述基于多线程的定时任务运行方法还包括:实时读取所述目标子定时任务的状态,得到实时目标子定时任务状态;判断所述实时目标子定时任务状态是否为断开状态;若所述实时目标子定时任务状态为所述断开状态,则基于数据库锁再次在所述多个运行线程中确定目标运行线程。

本发明第二方面提供了一种基于多线程的定时任务运行装置,包括:获取模块,用于获取多个定时任务与执行时刻,所述多个定时任务为财务管理系统发出的多个任务;任务拆分模块,用于基于每个定时任务读取对应的业务数据量,基于每个业务数据量将对应的定时任务拆分为多个子定时任务;编号创建模块,用于基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号;目标线程确定模块,当目标子定时任务在所述执行时刻被触发时,用于基于所述多个临时子节点编号和所述数据库锁在多个运行线程中确定目标运行线程;任务执行模块,用于通过所述数据库锁更新所述目标子定时任务的状态为工作状态,并通过所述目标运行线程执行所述目标子定时任务,得到与所述目标子定时任务对应的目标任务数据。

可选的,在本发明第二方面的第一种实现方式中,所述编号创建模块具体用于:读取预先设置好的数据库锁的名称,得到数据库锁名称,并创建以所述数据库锁名称命名路径的父节点;在所述父节点的路径下创建与每个运行线程对应的临时子节点,并读取每个临时子节点的路径;基于每个临时子节点的路径创建与每个临时子节点对应的临时子节点编号,得到多个临时子节点编号。

可选的,在本发明第二方面的第二种实现方式中,所述目标线程确定模块具体用于:当目标子定时任务在所述执行时刻被触发时,在所述多个临时子节点编号中搜寻最小的临时子节点编号,将所述最小的临时子节点编号确定为目标子节点编号;基于所述目标子节点编号确定对应的运行线程为目标运行线程。

可选的,在本发明第二方面的第三种实现方式中,所述任务执行模块包括:调整单元,用于调整所述数据库锁的记录为工作记录,从而将所述目标子定时任务的状态更新为工作状态;哈希值确定单元,用于通过所述目标运行线程确定所述目标子定时任务对应的目标数据哈希值;任务数据确定单元,用于根据所述目标数据哈希值确定与所述目标子定时任务对应的目标任务数据。

可选的,在本发明第二方面的第四种实现方式中,所述哈希值确定单元具体用于:从所述目标子定时任务中读取目标子定时任务编号,并通过所述目标运行线程在多个预置的数据分区中确定与所述目标子定时任务编号对应的目标数据分区,所述目标子定时任务编号与所述目标数据分区的编号相同;通过所述目标运行线程在所述目标数据分区中确定目标数据键名;基于预置的哈希函数结合所述目标数据键名和所述目标子定时任务的编号计算哈希值,得到目标哈希值。

可选的,在本发明第二方面的第五种实现方式中,所述基于多线程的定时任务运行装置还包括:创建模块,用于在预置的数据库表中增加数据库锁,并读取服务器的线程阈值,基于所述线程阈值创建线程,得到多个运行线程,所述数据库锁用于锁定任务的状态。

可选的,在本发明第二方面的第六种实现方式中,所述基于多线程的定时任务运行装置还包括:状态读取模块,用于实时读取所述目标子定时任务的状态,得到实时目标子定时任务状态;判断模块,用于判断所述实时目标子定时任务状态是否为断开状态;其他运行线程确定模块,若所述实时目标子定时任务状态为所述断开状态,则用于基于数据库锁再次在所述多个运行线程中确定目标运行线程。

本发明第三方面提供了一种基于多线程的定时任务运行设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述基于多线程的定时任务运行设备执行上述的基于多线程的定时任务运行方法。

本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的基于多线程的定时任务运行方法。

本发明提供的技术方案中,获取多个定时任务与执行时刻,所述多个定时任务为财务管理系统发出的多个任务;基于每个定时任务读取对应的业务数据量,基于每个业务数据量将对应的定时任务拆分为多个子定时任务;基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号;当目标子定时任务在所述执行时刻被触发时,基于所述多个临时子节点编号和所述数据库锁在多个运行线程中确定目标运行线程;通过所述数据库锁更新所述目标子定时任务的状态为工作状态,并通过所述目标运行线程执行所述目标子定时任务,得到与所述目标子定时任务对应的目标任务数据。本发明实施例中,将定时任务拆分为多个子定时任务,基于数据库锁和临时子节点编号为目标子定时任务确定目标运行线程,并基于数据库锁修改目标子定时任务的状态,从而通过目标运行线程执行目标子定时任务,得到目标数据,提高了资源的利用率和处理数据的工作效率。

附图说明

图1为本发明实施例中基于多线程的定时任务运行方法的一个实施例示意图;

图2为本发明实施例中基于多线程的定时任务运行方法的另一个实施例示意图;

图3为本发明实施例中基于多线程的定时任务运行装置的一个实施例示意图;

图4为本发明实施例中基于多线程的定时任务运行装置的另一个实施例示意图;

图5为本发明实施例中基于多线程的定时任务运行设备的一个实施例示意图。

具体实施方式

本发明实施例提供了一种基于多线程的定时任务运行方法、装置、设备及存储介质,用于提高资源的利用率和处理数据的工作效率。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中基于多线程的定时任务运行方法的一个实施例包括:

101、获取多个定时任务与执行时刻,多个定时任务为财务管理系统发出的多个任务;

服务获取执行时刻以及由财务管理系统发出的多个定时任务。

需要说明的是,定时任务为财务管理系统发出的业务类任务,例如处理核算下发的计提数据、压缩当月交易数据、筛选当月交易对账等。定时任务可以是在执行时刻执行的任务,也可以是在执行周期内被触发的任务,在本实施例中,主要以在执行时刻触发定时任务进行说明,当定时任务在执行时刻被触发时,即可进行数据处理、数据核算、数据压缩等操作。

本发明的执行主体可以为基于多线程的定时任务运行装置,还可以是终端或者服务器,具体此处不做限定。本发明实施例以服务器为执行主体为例进行说明。

102、基于每个定时任务读取对应的业务数据量,基于每个业务数据量将对应的定时任务拆分为多个子定时任务;

服务器读取每个定时任务的数据量,得到对应的业务数据量,基于每个定时任务的业务数据量拆分对应的定时任务,得到多个子定时任务。

需要说明的是,业务数据量可以按照字节数计量也可以按照行数计量,例如,以行数计量业务数据量时,业务数据量可以为10kw、12kw等,以字节数计量业务数据量时,业务数据量可以为500M、1000M等。

在得到与每个定时任务对应的业务数据量之后,服务器判断每个业务数据量是否大于数据量阈值;当目标定时任务对应的业务数据量大于数据量阈值时,服务器将目标定时任务拆分为多个子定时任务。

103、基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号;

服务器基于预先设置好的数据库锁多个运行线程创建多个临时子节点编号。

创建多个临时子节点编号时,以数据库锁作为参考依据进行创建路径,然后基于创建的路径进行编号,得到多个临时子节点编号。

需要说明的是,一个运行线程对应一个临时子节点编号,临时子节点编号可以理解为临时子节点路径的后缀,临时子节点编号可以看作运行线程的标识,例如临时子节点编号为001,那么对应的运行线程为001号运行线程。在本实施例中,主要采用一个分布式应用程序协调服务zookeeper创建临时子节点编号,zookeeper产生的路径是递增的,所以得到的临时子节点编号也是递增的。

104、当目标子定时任务在执行时刻被触发时,基于多个临时子节点编号和数据库锁在多个运行线程中确定目标运行线程;

当目标子定时任务在执行时刻被触发时,多个运行线程尝试获取数据库锁,服务器在多个运行线程中确定目标运行线程,服务器确定目标运行线程的依据为临时子节点编号。

当目标子定时任务被触发时,如果每个运行线程都执行目标子定时任务,则会重复执行目标子定时任务,浪费资源。此时数据库锁发挥减少资源浪费的作用,即在运行线程执行目标子定时任务之前,各个运行线程为执行目标子定时任务做准备,该准备为各个运行线程尝试获取数据库锁,服务器基于每个运行线程对应的临时子节点编号判断哪一个运行线程可以获取数据库锁,最后服务器将获取到数据库锁的运行线程确定为目标运行线程。

105、通过数据库锁更新目标子定时任务的状态为工作状态,并通过目标运行线程执行目标子定时任务,得到与目标子定时任务对应的目标任务数据。

服务器首先通过数据库锁更新目标子定时任务的状态,将其状态更新为工作状态,然后通过目标运行线程执行目标子定时任务,从而得到与目标子定时任务对应的目标任务数据。

当目标子定时任务的状态为工作状态时,相当于对其他运行线程说明自身抢到了这个目标子定时任务的执行资格,其他运行线程则不再执行该目标子定时任务,此时目标运行线程执行该目标子定时任务,得到对应的目标任务数据,目标任务数据为数据库中的业务数据,例如计提数据、交易数据以及对账数据等。

本发明实施例中,将定时任务拆分为多个子定时任务,基于数据库锁和临时子节点编号为目标子定时任务确定目标运行线程,并基于数据库锁修改目标子定时任务的状态,从而通过目标运行线程执行目标子定时任务,得到目标数据,提高了资源的利用率和处理数据的工作效率。

请参阅图2,本发明实施例中基于多线程的定时任务运行方法的另一个实施例包括:

201、在预置的数据库表中增加数据库锁,并读取服务器的线程阈值,基于线程阈值创建线程,得到多个运行线程,数据库锁用于锁定任务的状态;

服务器在预置的数据库表中添加用于锁定任务状态的数据库锁,然后读取服务器的线程阈值,基于该线程阈值创建线程,得到多个运行线程。

服务器在数据库表中添加一条记录,字段名字为lack_name,即数据库锁,该数据库锁只有一条,在同一个时间只有一个运行线程可以获取到该数据库锁,通过该数据库锁,可以将任务的状态更新为工作状态,其他线程就不会重复执行该任务。每个服务器都有线程阈值,例如服务器A的线程阈值为10,则可以创建1个、2个、3个、4个、5个、6个、7个、8个、9个以及10个运行线程,无法创建11个运行线程。

202、获取多个定时任务与执行时刻,多个定时任务为财务管理系统发出的多个任务;

服务获取执行时刻以及由财务管理系统发出的多个定时任务。

需要说明的是,定时任务为财务管理系统发出的业务类任务,例如处理核算下发的计提数据、压缩当月交易数据、筛选当月交易对账等。定时任务可以是在执行时刻执行的任务,也可以是在执行周期内被触发的任务,在本实施例中,主要以在执行时刻触发定时任务进行说明,当定时任务在执行时刻被触发时,即可进行数据处理、数据核算、数据压缩等操作。

203、基于每个定时任务读取对应的业务数据量,基于每个业务数据量将对应的定时任务拆分为多个子定时任务;

服务器读取每个定时任务的数据量,得到对应的业务数据量,基于每个定时任务的业务数据量拆分对应的定时任务,得到多个子定时任务。

需要说明的是,业务数据量可以按照字节数计量也可以按照行数计量,例如,以行数计量业务数据量时,业务数据量可以为10kw、12kw等,以字节数计量业务数据量时,业务数据量可以为500M、1000M等。

在得到与每个定时任务对应的业务数据量之后,服务器判断每个业务数据量是否大于数据量阈值;当目标定时任务对应的业务数据量大于数据量阈值时,服务器将目标定时任务拆分为多个子定时任务。

204、基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号;

服务器基于预先设置好的数据库锁多个运行线程创建多个临时子节点编号。

创建多个临时子节点编号时,以数据库锁作为参考依据进行创建路径,然后基于创建的路径进行编号,得到多个临时子节点编号。

需要说明的是,一个运行线程对应一个临时子节点编号,临时子节点编号可以理解为临时子节点路径的后缀,临时子节点编号可以看作运行线程的标识,例如临时子节点编号为001,那么对应的运行线程为001号运行线程。在本实施例中,主要采用一个分布式应用程序协调服务zookeeper创建临时子节点编号,zookeeper产生的路径是递增的,所以得到的临时子节点编号也是递增的。

具体的,服务器读取预先设置好的数据库锁的名称,得到数据库锁名称,并创建以数据库锁名称命名路径的父节点;服务器在父节点的路径下创建与每个运行线程对应的临时子节点,并读取每个临时子节点的路径;服务器基于每个临时子节点的路径创建与每个临时子节点对应的临时子节点编号,得到多个临时子节点编号。

服务器读取预先设置好的数据库锁的名称,在本实施例中,该名称为lack_name,服务器以lack_name为路径创建父节点,该父节点的类型为持久节点;然后在多个运行线程尝试获取数据库锁时,以父节点为依据创建与每个运行线程对应的子节点,得到多个临时子节点,临时子节点的类型为临时自编号节点;其中在创建临时子节点时,自动按照父节点的路径创建临时子节点的路径,此时服务器读取与每个临时子节点对应的临时子节点的路径;服务器通过每个临时子节点的路径后缀,获取与每个临时子节点对应的临时子节点编号。

例如,父节点的路径为lack_name,基于父节点得到的6个临时子节点的路径分别为lack_name_base0001、lack_name_base0002、lack_name_base0003、lack_name_base0004、lack_name_base0005以及lack_name_base0006,服务器从每个临时子节点的路径后缀中提取编号,分别得到临时子节点编号0001、临时子节点编号0002、临时子节点编号0003、临时子节点编号0004、临时子节点编号0005以及临时子节点编号0006。

205、当目标子定时任务在执行时刻被触发时,基于多个临时子节点编号和数据库锁在多个运行线程中确定目标运行线程;

当目标子定时任务在执行时刻被触发时,多个运行线程尝试获取数据库锁,服务器在多个运行线程中确定目标运行线程,服务器确定目标运行线程的依据为临时子节点编号。

当目标子定时任务被触发时,如果每个运行线程都执行目标子定时任务,则会重复执行目标子定时任务,浪费资源。此时数据库锁发挥减少资源浪费的作用,即在运行线程执行目标子定时任务之前,各个运行线程为执行目标子定时任务做准备,该准备为各个运行线程尝试获取数据库锁,服务器基于每个运行线程对应的临时子节点编号判断哪一个运行线程可以获取数据库锁,最后服务器将获取到数据库锁的运行线程确定为目标运行线程。

具体的,当目标子定时任务被触发时,在多个临时子节点编号中搜寻最小的临时子节点编号,并将该最小的临时子节点编号确定为目标子节点编号,然后基于目标子节点编号确定对应的运行线程,从而得到目标运行线程。

需要说明的是,在本实施例中,由于zookeeper创建自编号的方式具有递增特性,说明最小的临时子节点编号对应的运行线程最接近数据库锁,因此将最小的临时子节点编号确定为目标子节点编号。

206、通过数据库锁更新目标子定时任务的状态为工作状态,并通过目标运行线程执行目标子定时任务,得到与目标子定时任务对应的目标任务数据。

服务器首先通过数据库锁更新目标子定时任务的状态,将其状态更新为工作状态,然后通过目标运行线程执行目标子定时任务,从而得到与目标子定时任务对应的目标任务数据。

当目标子定时任务的状态为工作状态时,相当于对其他运行线程说明自身抢到了这个目标子定时任务的执行资格,其他运行线程则不再执行该目标子定时任务,此时目标运行线程执行该目标子定时任务,得到对应的目标任务数据,目标任务数据为数据库中的业务数据,例如计提数据、交易数据以及对账数据等。

具体的,服务器调整数据库锁的记录为工作记录,从而将目标子定时任务的状态更新为工作状态;然后服务器通过目标线程确定目标子定时任务对应的哈希值,得到目标数据哈希值;最后服务器根据该目标数据哈希值在数据库中确定目标任务数据。

通过目标线程确定目标子定时任务对应的哈希值的具体过程为:

服务器从目标子定时任务中读取任务编号,得到目标子定时任务编号,服务器通过目标运行线程在多个预置的数据分区中确定与目标子定时任务编号对应的目标数据分区,目标子定时任务编号与目标数据分区的编号相同;然后服务器通过目标运行线程在目标数据分区中确定目标数据键名;最后服务器基于预置的哈希函数结合目标数据键名和目标子定时任务的编号计算哈希值,得到目标哈希值。

需要说明是,每个子定时任务都包括对应的编号,数据分区也有对应的编号,且子定时任务的编号数值和数据分区的数量相同,若多个子定时任务的编号数值分别为1、1、2、3、4、5、5。则数据分区的数量为5个,其中编号数值为1的子定时任务位于数据分区1中,编号数值为2的子定时任务位于数据分区2中、编号数值为3的子定时任务位于数据分区3中、编号数值为4的子定时任务位于数据分区4中以及编号数值为5的子定时任务位于数据分区5中。若目标子定时任务编号为2,则确定目标数据分区为数据分区2,服务器通过目标运行线程在数据分区2中确定与目标子定时任务对应的目标数据键名,然后服务器采用预置的哈希函数计算目标哈希值,哈希函数为ora_hash(id_key,#count#)=#index#,其中id_key为目标数据键名,index为对应的子任务编号,从而得到目标哈希值。服务器最后根据目标哈希值确定目标任务数据。

除上述步骤外,基于多线程的定时任务运行方法还包括:

服务器实时读取目标子定时任务的状态,得到实时目标子定时任务状态;服务器判断实时目标子定时任务状态是否为断开状态;若实时目标子定时任务状态为断开状态,服务器则基于数据库锁再次在多个运行线程中确定目标运行线程。

目标运行程序在执行目标子任务之后,会释放数据库锁,即更新数据库锁的记录为断开记录,从而使得目标子定时任务的状态为断开状态,此时服务器又可以确定其他目标运行线程执行其他的目标子定时任务。

需要说明的是,目标运行程序执行目标子任务的时长为30s,服务器既可以实时判断目标子定时任务状态是否为断开状态,也可以每30s判断一次目标子定时任务状态是否为断开状态。

本发明实施例中,将定时任务拆分为多个子定时任务,基于数据库锁和临时子节点编号为目标子定时任务确定目标运行线程,并基于数据库锁修改目标子定时任务的状态,从而通过目标运行线程执行目标子定时任务,得到目标数据,提高了资源的利用率和处理数据的工作效率。

上面对本发明实施例中基于多线程的定时任务运行方法进行了描述,下面对本发明实施例中基于多线程的定时任务运行装置进行描述,请参阅图3,本发明实施例中基于多线程的定时任务运行装置一个实施例包括:

获取模块301,用于获取多个定时任务与执行时刻,多个定时任务为财务管理系统发出的多个任务;

任务拆分模块302,用于基于每个定时任务读取对应的业务数据量,基于每个业务数据量将对应的定时任务拆分为多个子定时任务;

编号创建模块303,用于基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号;

目标线程确定模块304,当目标子定时任务在所述执行时刻被触发时,用于基于所述多个临时子节点编号和所述数据库锁在多个运行线程中确定目标运行线程;

任务执行模块305,用于通过所述数据库锁更新所述目标子定时任务的状态为工作状态,并通过所述目标运行线程执行所述目标子定时任务,得到与所述目标子定时任务对应的目标任务数据。

本发明实施例中,将定时任务拆分为多个子定时任务,基于数据库锁和临时子节点编号为目标子定时任务确定目标运行线程,并基于数据库锁修改目标子定时任务的状态,从而通过目标运行线程执行目标子定时任务,得到目标数据,提高了资源的利用率和处理数据的工作效率。

请参阅图4,本发明实施例中基于多线程的定时任务运行装置的另一个实施例包括:

获取模块301,用于获取多个定时任务与执行时刻,多个定时任务为财务管理系统发出的多个任务;

任务拆分模块302,用于基于每个定时任务读取对应的业务数据量,基于每个业务数据量将对应的定时任务拆分为多个子定时任务;

编号创建模块303,用于基于预先设置好的数据库锁和多个预先设置好的运行线程创建多个临时子节点编号;

目标线程确定模块304,当目标子定时任务在所述执行时刻被触发时,用于基于所述多个临时子节点编号和所述数据库锁在多个运行线程中确定目标运行线程;

任务执行模块305,用于通过所述数据库锁更新所述目标子定时任务的状态为工作状态,并通过所述目标运行线程执行所述目标子定时任务,得到与所述目标子定时任务对应的目标任务数据。

可选的,编号创建模块303还可以具体用于:

读取预先设置好的数据库锁的名称,得到数据库锁名称,并创建以所述数据库锁名称命名路径的父节点;

在所述父节点的路径下创建与每个运行线程对应的临时子节点,并读取每个临时子节点的路径;

基于每个临时子节点的路径创建与每个临时子节点对应的临时子节点编号,得到多个临时子节点编号。

可选的,目标线程确定模块304还可以具体用于:

当目标子定时任务在所述执行时刻被触发时,在所述多个临时子节点编号中搜寻最小的临时子节点编号,将所述最小的临时子节点编号确定为目标子节点编号;

基于所述目标子节点编号确定对应的运行线程为目标运行线程。

可选的,任务执行模块305包括:

调整单元3051,用于调整所述数据库锁的记录为工作记录,从而将所述目标子定时任务的状态更新为工作状态;

哈希值确定单元3052,用于通过所述目标运行线程确定所述目标子定时任务对应的目标数据哈希值;

任务数据确定单元3053,用于根据所述目标数据哈希值确定与所述目标子定时任务对应的目标任务数据。

可选的,哈希值确定单元3052还可以具体用于:

从所述目标子定时任务中读取目标子定时任务编号,并通过所述目标运行线程在多个预置的数据分区中确定与所述目标子定时任务编号对应的目标数据分区,所述目标子定时任务编号与所述目标数据分区的编号相同;

通过所述目标运行线程在所述目标数据分区中确定目标数据键名;

基于预置的哈希函数结合所述目标数据键名和所述目标子定时任务的编号计算哈希值,得到目标哈希值。

可选的,所述基于多线程的定时任务运行装置还包括:

创建模块306,用于在预置的数据库表中增加数据库锁,并读取服务器的线程阈值,基于所述线程阈值创建线程,得到多个运行线程,所述数据库锁用于锁定任务的状态。

可选的,所述基于多线程的定时任务运行装置还包括:

状态读取模块307,用于实时读取所述目标子定时任务的状态,得到实时目标子定时任务状态;

判断模块308,用于判断所述实时目标子定时任务状态是否为断开状态;

其他运行线程确定模块309,若所述实时目标子定时任务状态为所述断开状态,则用于基于数据库锁再次在所述多个运行线程中确定目标运行线程。

本发明实施例中,将定时任务拆分为多个子定时任务,基于数据库锁和临时子节点编号为目标子定时任务确定目标运行线程,并基于数据库锁修改目标子定时任务的状态,从而通过目标运行线程执行目标子定时任务,得到目标数据,提高了资源的利用率和处理数据的工作效率。

上面图3和图4从模块化功能实体的角度对本发明实施例中的基于多线程的定时任务运行装置进行详细描述,下面从硬件处理的角度对本发明实施例中基于多线程的定时任务运行设备进行详细描述。

图5是本发明实施例提供的一种基于多线程的定时任务运行设备的结构示意图,该基于多线程的定时任务运行设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对基于多线程的定时任务运行设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在基于多线程的定时任务运行设备500上执行存储介质530中的一系列指令操作。

基于多线程的定时任务运行设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图5示出的基于多线程的定时任务运行设备结构并不构成对基于多线程的定时任务运行设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

进一步地,所述计算机可用存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。

本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述基于多线程的定时任务运行方法的步骤。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 基于多线程的定时任务运行方法、装置、设备及存储介质
  • 基于java多线程的监控方法、装置、设备以及存储介质
技术分类

06120112297631