基于多线程环境的任务处理方法及装置与流程

文档序号:14043699阅读:118来源:国知局

本发明涉及数据处理技术领域,尤其涉及一种基于多线程环境的任务处理方法及装置。



背景技术:

由于保险、金融等行业的大部分业务都具有数据量大的特征,往往采用多线程并发的方式进行业务处理,现有的多线程环境下,线程在执行完调度任务后,会将调度任务的状态标记为已执行状态,但是对于数据量大的业务来说,一个调度任务中可能存在较多的任务对象,或者一个调度任务的处理周期较长,导致线程在没有执行完这个调度任务时,该调度任务又被其他的线程重复执行。

例如,一般在承保完成后,需要基于保单的被保人信息中的联系方式向被保人发送通知信息,如短信、邮件等,在团单业务中,一个保单中有多个被保人,因此被保人信息较多。在这个业务中,每一个保单对应一个调度任务,被保人信息较多会造成该调度任务的执行时间较长,导致一个线程在执行该调度任务的过程中,即从保单中获取被保人信息并向被保人发送通知信息的过程中,该调度任务的任务对象,即被保人信息,又被其他的线程抓取,造成该调度任务被重复执行,导致通知信息被重复发送,进而造成处理业务的效率较低。



技术实现要素:

本发明提供一种基于多线程环境的任务处理方法及装置,其主要目的在于解决现有技术中同一调度任务被多个线程重复执行的技术问题。

为实现上述目的,本发明提供一种基于多线程环境的任务处理方法,该基于多线程环境的任务处理方法包括:

在基于多线程环境执行任务列表中的调度任务的过程中,当侦测到有线程启动调度任务时,读取为启动的所述调度任务预设的业务主键;

将读取到的所述业务主键放入建立的锁表中;

根据读取到的所述业务主键获取所述调度任务的任务对象,并由所述线程基于所述任务对象执行所述调度任务。

可选地,所述根据读取到的所述业务主键获取所述调度任务的任务对象,并由所述线程基于所述任务对象执行所述调度任务的步骤之后,所述基于多线程环境的任务处理方法还包括步骤:

检测所述调度任务的执行进度,并在检测到所述调度任务执行完毕时,释放所述锁表中的所述业务主键。

可选地,所述当侦测到有线程启动调度任务时,读取为启动的所述调度任务预设的业务主键的步骤之后,所述基于多线程环境的任务处理方法还包括步骤:

判断是否成功读取所述业务主键;

若成功读取所述业务主键,则执行所述将读取到的所述业务主键放入建立的锁表中的步骤;

若读取所述业务主键失败,则释放所述调度任务占用的资源并启动所述任务列表中的下一个调度任务,并执行读取为启动的所述调度任务预设的业务主键的步骤。

可选地,所述基于多线程环境的任务处理方法还包括步骤:

定时地获取所述锁表中的业务主键被持续锁定的时长;

当检测到所述锁表中有业务主键被持续锁定的时长大于预设时长时,将该业务主键从所述锁表中释放。

可选地,所述基于多线程环境的任务处理方法还包括步骤:

在检测到所述调度任务执行完毕时,将所述调度任务的状态标记为已处理状态。

此外,为实现上述目的,本发明还提供一种基于多线程环境的任务处理装置,该基于多线程环境的任务处理装置包括:

主键读取模块,用于在基于多线程环境执行任务列表中的调度任务的过程中,当侦测到有线程启动调度任务时,读取为启动的所述调度任务预设的业务主键;

主键锁定模块,用于将读取到的所述业务主键放入建立的锁表中;

任务执行模块,用于根据读取到的所述业务主键获取所述调度任务的任务对象,并由所述线程基于所述任务对象执行所述调度任务。

可选地,所述基于多线程环境的任务处理装置还包括:

主键释放模块,用于检测所述调度任务的执行进度,并在检测到所述调度任务执行完毕时,释放所述锁表中的所述业务主键。

可选地,所述基于多线程环境的任务处理装置还包括:

判断模块,用于判断是否成功读取所述业务主键;

所述主键锁定模块还用于:若成功读取所述业务主键,则将读取到的所述业务主键放入建立的锁表中;

所述任务执行模块还用于:释放所述调度任务占用的资源并启动所述任务列表中的下一个调度任务,并执行读取为启动的所述调度任务预设的业务主键。

可选地,所述基于多线程环境的任务处理装置还包括:

时长获取模块,用于定时地获取所述锁表中的业务主键被持续锁定的时长;

所述主键释放模块还用于:当检测到所述锁表中有业务主键被持续锁定的时长大于预设时长时,将该业务主键从所述锁表中释放。

可选地,所述基于多线程环境的任务处理装置还包括:

状态标记模块,用于在检测到所述调度任务执行完毕时,将所述调度任务的状态标记为已处理状态。

本发明提出的基于多线程环境的任务处理方法及装置,在基于多线程环境执行任务列表中的调度任务时,在侦测到有线程启动调度任务时,读取启动的调度任务的业务主键,将读取到的业务主键放入到建立的锁表中,然后根据读取到的业务主键获取调度任务的任务对象,并由该线程基于任务对象执行上述调度任务,对于存放在锁表中的业务主键,线程无法再读取,进而无法执行该业务主键对应的调度任务,就能够避免任务列表中的调度任务被不同的线程重复执行,提高业务的执行效率。

附图说明

图1为本发明基于多线程环境的任务处理方法第一实施例的流程图;

图2为本发明基于多线程环境的任务处理装置第一实施例的功能模块示意图;

图3为本发明基于多线程环境的任务处理装置第一实施例的另一实施方式的功能模块示意图;

图4为本发明基于多线程环境的任务处理装置第二实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明提供一种基于多线程环境的任务处理方法。参照图1所示,为本发明基于多线程环境的任务处理方法第一实施例的流程图。

在本实施例中,该基于多线程环境的任务处理方法包括:

步骤s10,在基于多线程环境执行任务列表中的调度任务的过程中,当侦测到有线程启动调度任务时,读取为启动的所述调度任务预设的业务主键。

步骤s20,将读取到的所述业务主键放入建立的锁表中;

步骤s30,根据读取到的所述业务主键获取所述调度任务的任务对象,并由所述线程基于所述任务对象执行所述调度任务。

在本发明实施例中,基于多线程环境执行调度任务,为待处理的业务建立任务列表,该任务列表中包含有多个调度任务,由预先设置的多线程环境中的多个线程共同处理该任务列表中的调度任务,线程在处理任务列表中的调度任务时,按照为任务列表中的调度任务预先设置的排列顺序执行调度任务。在启动上述任务列表时建立锁表,线程不可读取存放在锁表中的业务主键,进而不可执行与该业务主键对应的调度任务。其中,对于一个调度任务来说,其业务主键的数量不作限制,可以是一个或者多个。

在侦测到有线程启动调度任务时,先读取为该调度任务预设的业务主键,如果读取成功,则说明该调度任务的业务主键没有存放在锁表中,该线程可以执行这个调度任务,如果读取失败,则说明该调度任务的业务主键处于不可读取的状态,当前有其他线程正在处理该任务,则可以直接跳过该调度任务,执行任务列表中的下一个调度任务,由于在线程启动调度任务后,会先为该调度任务分配一定的资源以供任务的执行,因此在执行下一个调度任务之前,需要将当前调度任务占用的资源释放以避免资源的浪费。

具体地,在步骤s10之后,该基于多线程环境的任务处理方法还包括:

判断是否成功读取所述业务主键;若成功读取所述业务主键,则执行将读取到的所述业务主键放入建立的锁表中的步骤;若读取所述业务主键失败,则释放所述调度任务占用的资源并启动所述任务列表中的下一个调度任务,并执行读取为启动的所述调度任务预设的业务主键的步骤。

本实施例中,线程成功读取到业务主键时,将该业务主键存放在建立的锁表中,然后根据业务主键获取该调度任务的任务对象,并基于获取到的任务对象执行该调度任务,进一步地,在执行该调度任务的过程中,实时或者定时地检测所述调度任务的执行进度,并在检测到所述调度任务执行完毕时,释放所述锁表中的所述业务主键;并且,在检测到所述调度任务执行完毕时,将所述调度任务的状态标记为已处理状态。

以下列举一具体的应用场景对该实施例的方法进行说明,以保险业务中团单的客户通知业务为例进行说明,其中,团单即团体保险单,为被保人数量多于设定的数量的保单,其中一个保单对应一个调度任务,每一个调度任务中需要向保单中的所有被保人发送通知信息。

在本实施例中,每一个调度任务预设的业务主键可以包括一个或者多个,业务主键可以是任务对象本身,或者是与任务对象关联的业务数据,如果该业务数据作为业务主键存放到锁表中,则线程无法再获取与该业务数据关联的任务对象。具体地,可以将每一个调度任务中的保单号作为业务主键,线程在启动调度任务后,需要先获取与该任务对应的保单号,进而从与获取到的保单号对应的保单中抓取需要的被保人信息,因此,如果将保单号作为业务主键放入到锁表中后,其他的线程在获取保单号时,就会检测到该保单号被锁,进而无法继续获取对应的被保人信息,也无法执行对应的调度任务。对于执行该调度任务的线程来说,在启动该调度任务时,读取保单号,将读取到的保单号存放到锁表中,并从该保单中获取被保人信息,基于获取到的被保人信息向每一个被保人发送通知信息,在通知信息发送完成之后,将该调度任务的状态修改为已执行状态。

或者,在其他的实施方式中,只是将执行调度任务时需要从保单中抓取的部分数据作为业务主键,即将任务对象作为业务主键,例如,如果该团单的客户通知业务中,需要向被保人发送短信通知信息,则在执行调度任务时,需要获取的部分数据则为被保人信息中的被保人姓名以及手机号码,而一般情况下,保单中的被保人信息中包含有被保人姓名、手机号码、地址、证件类型以及证件号码等信息,因此,在这个业务场景下,可以将被保人姓名以及手机号码作为预设的业务主键,在启动了一个调度任务时,将该调度任务的保单中被保人姓名以及手机号码放入到建立的锁表中,对于团单来说,由于被保人有多个,因此,需要将每个被保人的姓名以及手机号码都作为业务主键存放到锁表中,即使其他的线程在启动调度任务时,能够读取到保单号,但是无法读取到执行业务需要的被保人姓名以及手机号码,故,其他的线程仍然无法执行该任务;并且,采用部分数据作为业务主键时,不影响其他的线程获取该保单中的其他数据。

需要说明的是,上述应用场景只为举例说明,本实施例的方法并不限于团单的业务处理,可以应用于任何多线程环境下的业务处理。

本实施例提出的基于多线程环境的任务处理方法,在基于多线程环境执行任务列表中的调度任务时,在侦测到有线程启动调度任务时,读取启动的调度任务的业务主键,将读取到的业务主键放入到建立的锁表中,然后根据读取到的业务主键获取调度任务的任务对象,并由该线程基于任务对象执行上述调度任务,对于存放在锁表中的业务主键,线程无法再读取,进而无法执行该业务主键对应的调度任务,就能够避免任务列表中的调度任务被不同的线程重复执行,提高业务的执行效率。

基于第一实施例提出本发明基于多线程环境的任务处理方法的第二实施例。在本实施例中,该基于多线程环境的任务处理方法还包括:

定时地获取所述锁表中的业务主键被持续锁定的时长;

当检测到所述锁表中有业务主键被持续锁定的时长大于预设时长时,将该业务主键从所述锁表中释放。

在该实施例中,对存放在锁表中的业务主键被持续锁定的时长进行检测,以避免当调度任务的执行出现异常导致业务主键被锁定的时间过长,例如在程序发生异常终止时,存放在锁表中的业务主键没有被释放,当程序再次启动时,所有的线程都无法成功读取该业务主键,进而导致对应的调度任务无法被执行,采用本实施例的方式,对于锁表中的业务主键被持续锁定的时长进行检测,当检测到被持续锁定的时长大于预设时长时,将其从锁表中释放,以避免有调度任务无法被执行,其中,预设时长可以由用户根据具体的调度任务来设置,例如,通过估算正常情况下执行调度任务需要的时间,将预设时长设置为大于该时间。

进一步地,作为一种实施方式,在步骤s10之前,该基于多线程环境的任务处理方法还包括:

在接收到输入的业务主键选择指令时,将所述业务主键选择指令对应的业务参数作为预设的业务主键。

在该实施方式,在基于多线程环境执行任务列表中的任务之前,可以为用户提供业务主键配置界面,以供用户基于该配置界面为待执行的调度任务配置预设的业务主键,在该配置界面中展示有调度任务对应的业务的所有业务参数,以保单为例,展示保单中的所有参数,用户可以基于展示的任一个参数触发选择指令,例如,用户选择保单中的被保人证件号码作为业务主键,则在线程执行调度任务时,需要将该调度任务的保单中的具体的被保人的证件号码作为业务主键存放到锁表中。通过本实施例的方法,用户可以启动程序处理业务之前,灵活地为业务配置业务主键。

本发明还提出一种基于多线程环境的任务处理装置。

参照图2所示,为本发明基于多线程环境的任务处理装置第一实施例的功能模块示意图。

在该实施例中,该基于多线程环境的任务处理装置包括:

主键读取模块10,用于在基于多线程环境执行任务列表中的调度任务的过程中,当侦测到有线程启动调度任务时,读取为启动的所述调度任务预设的业务主键。

主键锁定模块20,用于将读取到的所述业务主键放入建立的锁表中。

任务执行模块30,用于根据读取到的所述业务主键获取所述调度任务的任务对象,并由所述线程基于所述任务对象执行所述调度任务。

在本发明实施例中,基于多线程环境执行调度任务,为待处理的业务建立任务列表,该任务列表中包含有多个调度任务,由预先设置的多线程环境中的多个线程共同处理该任务列表中的调度任务,线程在处理任务列表中的调度任务时,按照为任务列表中的调度任务预先设置的排列顺序执行调度任务。在启动上述任务列表时建立锁表,线程不可读取存放在锁表中的业务主键,进而不可执行与该业务主键对应的调度任务。其中,对于一个调度任务来说,其业务主键的数量不作限制,可以是一个或者多个。

在侦测到有线程启动调度任务时,先读取为该调度任务预设的业务主键,如果读取成功,则说明该调度任务的业务主键没有存放在锁表中,该线程可以执行这个调度任务,如果读取失败,则说明该调度任务的业务主键处于不可读取的状态,当前有其他线程正在处理该任务,则可以直接跳过该调度任务,执行任务列表中的下一个调度任务,由于在线程启动调度任务后,会先为该调度任务分配一定的资源以供任务的执行,因此在执行下一个调度任务之前,需要将当前调度任务占用的资源释放以避免资源的浪费。

具体地,该基于多线程环境的任务处理装置还包括:

判断模块,用于判断是否成功读取所述业务主键;主键锁定模块20还用于:若成功读取所述业务主键,则将读取到的所述业务主键放入建立的锁表中;任务执行模块30还用于:释放所述调度任务占用的资源并启动所述任务列表中的下一个调度任务,并执行读取为启动的所述调度任务预设的业务主键。

本实施例中,线程成功读取到业务主键时,将该业务主键存放在建立的锁表中,然后根据业务主键获取该调度任务的任务对象,并基于获取到的任务对象执行该调度任务,进一步地,参照图3所示,作为一种实施方式,基于多线程环境的任务处理装置还包括:

主键释放模块40,用于检测所述调度任务的执行进度,并在检测到所述调度任务执行完毕时,释放所述锁表中的所述业务主键。在执行该调度任务的过程中,实时或者定时地检测所述调度任务的执行进度,并在检测到所述调度任务执行完毕时,释放所述锁表中的所述业务主键。

进一步地,基于多线程环境的任务处理装置还包括:

状态标记模块,用于在检测到所述调度任务执行完毕时,将所述调度任务的状态标记为已处理状态。

以下列举一具体的应用场景对该实施例进行说明,以保险业务中团单的客户通知业务为例进行说明,其中,团单即团体保险单,为被保人数量多于设定的数量的保单,其中一个保单对应一个调度任务,每一个调度任务中需要向保单中的所有被保人发送通知信息。

在本实施例中,每一个调度任务预设的业务主键可以包括一个或者多个,业务主键可以是任务对象本身,或者是与任务对象关联的业务数据,如果该业务数据作为业务主键存放到锁表中,则线程无法再获取与该业务数据关联的任务对象。具体地,可以将每一个调度任务中的保单号作为业务主键,线程在启动调度任务后,需要先获取与该任务对应的保单号,进而从与获取到的保单号对应的保单中抓取需要的被保人信息,因此,如果将保单号作为业务主键放入到锁表中后,其他的线程在获取保单号时,就会检测到该保单号被锁,进而无法继续获取对应的被保人信息,也无法执行对应的调度任务。对于执行该调度任务的线程来说,在启动该调度任务时,读取保单号,将读取到的保单号存放到锁表中,并从该保单中获取被保人信息,基于获取到的被保人信息向每一个被保人发送通知信息,在通知信息发送完成之后,将该调度任务的状态修改为已执行状态。

或者,在其他的实施方式中,只是将执行调度任务时需要从保单中抓取的部分数据作为业务主键,即将任务对象作为业务主键,例如,如果该团单的客户通知业务中,需要向被保人发送短信通知信息,则在执行调度任务时,需要获取的部分数据则为被保人信息中的被保人姓名以及手机号码,而一般情况下,保单中的被保人信息中包含有被保人姓名、手机号码、地址、证件类型以及证件号码等信息,因此,在这个业务场景下,可以将被保人姓名以及手机号码作为预设的业务主键,在启动了一个调度任务时,将该调度任务的保单中被保人姓名以及手机号码放入到建立的锁表中,对于团单来说,由于被保人有多个,因此,需要将每个被保人的姓名以及手机号码都作为业务主键存放到锁表中,即使其他的线程在启动调度任务时,能够读取到保单号,但是无法读取到执行业务需要的被保人姓名以及手机号码,故,其他的线程仍然无法执行该任务;并且,采用部分数据作为业务主键时,不影响其他的线程获取该保单中的其他数据。

需要说明的是,上述应用场景只为举例说明,本实施例的装置并不限于团单的业务处理,可以应用于任何多线程环境下的业务处理。

本实施例提出的基于多线程环境的任务处理装置,在基于多线程环境执行任务列表中的调度任务时,在侦测到有线程启动调度任务时,读取启动的调度任务的业务主键,将读取到的业务主键放入到建立的锁表中,然后根据读取到的业务主键获取调度任务的任务对象,并由该线程基于任务对象执行上述调度任务,对于存放在锁表中的业务主键,线程无法再读取,进而无法执行该业务主键对应的调度任务,就能够避免任务列表中的调度任务被不同的线程重复执行,提高业务的执行效率。

基于第一实施例提出本发明基于多线程环境的任务处理装置的第二实施例。参照图4所示,在本实施例中,该基于多线程环境的任务处理装置还包括:

时长获取模块50,用于定时地获取所述锁表中的业务主键被持续锁定的时长;

主键释放模块40还用于:当检测到所述锁表中有业务主键被持续锁定的时长大于预设时长时,将该业务主键从所述锁表中释放。

在该实施例中,对存放在锁表中的业务主键被持续锁定的时长进行检测,以避免当调度任务的执行出现异常导致业务主键被锁定的时间过长,例如在程序发生异常终止时,存放在锁表中的业务主键没有被释放,当程序再次启动时,所有的线程都无法成功读取该业务主键,进而导致对应的调度任务无法被执行,采用本实施例的方式,对于锁表中的业务主键被持续锁定的时长进行检测,当检测到被持续锁定的时长大于预设时长时,将其从锁表中释放,以避免有调度任务无法被执行,其中,预设时长可以由用户根据具体的调度任务来设置,例如,通过估算正常情况下执行调度任务需要的时间,将预设时长设置为大于该时间。

进一步地,该基于多线程环境的任务处理装置还包括:

主键设置模块,用于在接收到输入的业务主键选择指令时,将所述业务主键选择指令对应的业务参数作为预设的业务主键。

在该实施方式,在基于多线程环境执行任务列表中的任务之前,可以为用户提供业务主键配置界面,以供用户基于该配置界面为待执行的调度任务配置预设的业务主键,在该配置界面中展示有调度任务对应的业务的所有业务参数,以保单为例,展示保单中的所有参数,用户可以基于展示的任一个参数触发选择指令,例如,用户选择保单中的被保人证件号码作为业务主键,则在线程执行调度任务时,需要将该调度任务的保单中的具体的被保人的证件号码作为业务主键存放到锁表中。通过本实施例的装置,用户可以启动程序处理业务之前,灵活地为业务配置业务主键。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,云端服务器或者网络设备等)执行本发明各个实施例的方法。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

另外,在发明中涉及“第一”、“第二”等等的描述仅描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当人认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1