一种定时器任务自动处理方法及系统的制作方法

文档序号:6437306阅读:163来源:国知局
专利名称:一种定时器任务自动处理方法及系统的制作方法
技术领域
本发明属于计算机技术领域,尤其涉及一种定时器任务自动处理方法及系统。
背景技术
在应用系统/应用平台中,定时器(Timer)常被用来完成周期性的任务或特定时刻的待执行任务。对于需要支持大量Timer任务的平台或系统,Timer任务管理和执行决定了该平台或系统的性能。在现有技术中主要通过平衡堆的方式进行Timer任务的管理和执行,需要花费较多的时间来进行平衡堆的调整,系统开销较大。针对该问题,华为技术有限公司提出申请号为200510130535. 1的发明专利申请, 在该申请中提出了一种对定时器任务进行管理的方法,具体为提供了一种对Timer (定时器)任务进行管理的方法,包括步骤在系统中创建至少一个固定周期定时器任务队列,所述固定周期定时器任务队列的属性包括一特定触发周期;将系统中的定时器任务放入与其触发周期相同的所述固定周期定时器任务队列,对该定时器任务进行管理。然而,在该申请中,将特定周期的任务放入特定周期定时器任务队列中进行处理,严重约束了任务的触发周期,不适用于处理多样化的周期任务,也不能有效处理随机的定时器任务,同时,一个固定周期定时器任务队列的执行时顺序的,在处理大量定时器任务时,无法实现并发处理,系统资源的利用率低。

发明内容
本发明实施例的目的在于提供一种定时器任务自动处理方法及系统,旨在解决现有技术Timer任务处理效率低、系统资源利用率低的问题。本发明实施例是这样实现的,一种定时器任务自动处理方法,所述方法包括下述步骤循环监听第一预设队列中是否有定时器任务进入;当监听到所述第一预设队列中有定时器任务进入时,将所述定时器任务添加到第二预设队列;循环监听所述第二预设队列是否有定时器任务进入;当监听到所述第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。本发明实施例的另一目的在于提供一种定时器任务自动处理系统,其特征在于, 所述系统包括第一监听单元,用于循环监听第一预设队列中是否有定时器任务进入;任务添加单元,用于当监听到第一预设队列中有定时器任务进入时,将所述定时器任务添加到第二预设队列;第二监听单元,用于循环监听第二预设队列是否有定时器任务进入;以及任务处理单元,用于当监听到所述第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。本发明实施例对第一预设队列进行循环监听,当监听到有定时器任务进入时,将定时器任务添加到第二预设队列,同时,循环监听第二预设队列是否有定时器任务进入,当监听到第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务,解决了现有技术无法实现定时器任务并发处理,系统资源的利用率低的问题,通过调用对应的线程对定时器任务进行处理,提高了任务的并发处理能力,进而提高了系统资源的利用率。


图1是本发明实施例一提供的定时器任务自动处理方法的实现流程图;图2是本发明实施例二提供的定时器任务自动处理方法的实现流程图;图3是本发明实施例三提供的定时器任务自动处理方法的实例图;图4是本发明实施例四提供的定时器任务自动处理系统的结构图;图5是本发明实施例五提供的定时器任务自动处理系统的结构图;图6是本发明实施例六提供的定时器任务自动处理系统的结构图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。以下结合具体实施例对本发明的具体实现进行详细描述实施例一图1示出了本发明实施例一提供的定时器任务自动处理方法的实现流程,详述如下在步骤SlOl中,循环监听第一预设队列中是否有定时器任务进入。在步骤S102中,当监听到第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列。在本发明实施例中,预先建立一个队列,用于存储定时器任务,该定时器任务可以为用户定制的定时任务,也可以是其它应用程序生成的定时任务,在此不用限制并发明,同时,对该队列循环监听,从而实现对用户定制的定时器任务的实时发现。当监听到第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列,并在第一预队列中删除该定时器任务。在步骤S103中,循环监听第二预设队列是否有定时器任务进入。在本发明实施例中,预先创建一个队列,即第二预队列,以用于临时存放将要执行的定时器任务,起到一定缓存作用,并对该队列进行实时的监听。在步骤S104中,当监听到第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。在本发明实施例中,当监听到第二预设队列中有定时器任务进入时,调用对应的线程执行该定时器任务,并删除第二预设队列中的该任务,以实现定时器任务的实时处理,在具体实施过程中,可以创建一个新的线程对该定时器任务进行处理,也可以将该定时器任务添加到预先创建的线程池中,由线程池中的线程进行执行,从而大大减少了线程的创建和销毁次数,提高了定时器任务处理的工作效率。具体地,在本发明实施例中,可以预先创建第一监听线程和第二监听线程分别用于循环监听第一预设队列和第二预设队列,从而提高系统的并发程度,提高中央处理器 (CPU)、内存等资源的利用率。在本发明实施例中,当定时器任务执行成功时,则可以返回执行结果数据,当定时器任务执行失败时,较优地,应将定时器任务写入第三预设队列中,以方便用户对任务执行失败的原因进行分析,或在其下一循环周期的定时时间到达时,直接将其加入第一预设队列再次执行,从而提高任务异常处理的智能化程度。在本发明实施例中,预先建立第一预设队列和第二预设队列,并对两个队列进行循环监听,两个队列中任务的添加、监听,以及线程的处理都可以进行并发执行,从而提高了任务的并发处理能力,进而提高了系统资源的利用率。实施例二 在本发明实施例中,采用线程池执行定时器任务,从而防止了频繁的线程创建与销毁引起的大量系统资源浪费,使得更多的CPU时间和内存可以用来处理实际的定时器任务(例如,商业应用)。图2示出了本发明实施例二提供的定时器任务自动处理方法的实现流程,详述如下在步骤S201中,循环监听第一预设队列中是否有定时器任务进入。在步骤S202中,当监听到第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列。 在本发明实施例中,预先建立一个队列,用于存储定时器任务,该定时器任务可以为用户定制的定时任务,也可以是其它应用程序生成的定时任务,在此不用限制并发明,同时,循环监听该队列,从而实现对用户定制的定时器任务的实时发现。当监听到第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列,并在第一预队列中删除该定时器任务。在步骤S203中,循环监听第二预设队列是否有定时器任务进入。在本发明实施例中,预先创建一个队列,即第二预队列,以用于临时存放将要执行的定时器任务,并对该队列进行实时的监听。在步骤S204中,当监听到第二预设队列中有定时器任务进入时,将定时器任务添加到预先创建的线程池。在线程池中,先启动若干数量的线程,并让这些线程都处于睡眠状态,当接收到一个新请求时,唤醒线程池中的某一个睡眠线程,让其处理该请求,当处理完请求后,线程又处于睡眠状态,线程可以循环执行接收到请求任务。在本发明实施例中,当监听到第二预设队列中有定时器任务进入时,将定时器任务添加到预先创建的线程池,由线程池进行定时器任务的执行。在步骤S205中,判断线程池的缓存队列是否已满,当线程池的缓存队列已满时, 执行步骤S206,否则执行步骤S207。
在本发明实施例中,线程池中设置一缓存队列用于缓存添加至线程池中、来不及处理执行的定时器任务,缓存队列的长度在创建线程池时进行设定。在步骤S206中,当线程池的缓存队列已满时,阻塞第二预设队列的监听。在本发明实施例中,当线程池的缓存队列已满时,阻塞第二预设队列的监听,从而不再将进入第二预设队列添加到线程池,第二预设队列在一定程度上可以缓存进入的定时器任务。当经过一段时间后,线程池的缓存队列中部分定时器任务已经被执行完,可以接收新的定时器任务进入,此时,启动第二预设队列的循环监听。在步骤S207中,当线程池的缓存队列未满时,控制线程池执行定时器任务。在本发明实施例中,当线程池的缓存队列未满时,如果线程池的缓存队列为空,则可以唤醒一个休眠的线程立即执行该定时器任务,如果线程池的缓存队列不为空,则将定时器任务添加缓冲队列,等待被执行,当排在其前方的定时器任务被执行完成时,则执行该任务。在本发明实施例中,当定时器任务添加到线程池时,删除第二预设队列中的该任务,如果定时器任务在线程池中被成功执行,则通过线程池提高的接口返回相应的执行结果数据,当定时器任务执行失败时,较优地,应将定时器任务写入第三预设队列中,以方便用户对任务执行失败的原因进行分析,或在其下一循环周期的定时时间到达时,直接将其加入第一预设队列再次执行,从而提高任务异常处理的智能化程度。在本发明实施例中,将定时器任务添加到线程池,由线程池中的线程进行任务的执行,减少单独创建和销毁线程的次数,特别是一些资源耗费此较大的线程的创建和销毁, 从而尽量利用已有线程来执行定时器任务,提高系统的并发能力,提高系统资源的利用效率。实施例三图3示出了本发明实施例三提供的定时器任务自动处理方法的具体实例图,详述如下在本发明实施例中,定时器任务自动处理系统包括三个部分Web客户端、服务器和数据库,数据库可以作为服务器的一部分,也可以单独部署。在Web客户端可以向用户提供失败任务的查询、定时器任务的参数配置,以方便用户定时器任务的定制;在服务器上创建有用于处理定时器任务的线程池、以及用于数据库存取的DAO ;数据库用于存储定时器相关的数据,例如用于存储用户定制的定时器任务的第一预设队列、用于存储从第一预设队列进入的定时器任务的第二预设队列以及用于存储线程池中执行失败的定时器任务的失败任务队列。具体地,定时器任务自动处理方法的具体实现不受此限制。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中, 所述的存储介质,如ROM/RAM、磁盘、光盘等。实施例四图4示出了本发明实施例四提供的定时器任务自动处理系统的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括第一监听单元41循环监听第一预设队列中是否有定时器任务进入。任务添加单元42当监听到第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列。第二监听单元43循环监听第二预设队列是否有定时器任务进入。任务处理单元44当监听到第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。任务写入单元45当处理进入的定时器任务失败时,将定时器任务写入第三预设队列中。在本发明实施例中,预先建立第一预设队列和第二预设队列,并对两个队列进行循环监听,两个队列中任务的添加、监听,以及线程的处理都可以进行并发执行,从而提高了任务的并发处理能力,进而提高了系统资源的利用率。实施例五图5示出了本发明实施例五提供的定时器任务自动处理系统的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括线程创建单元51创建第一监听线程和第二监听线程。第一监听单元52循环监听第一预设队列中是否有定时器任务进入。第一监听单元52可以包括用于调用第一监听线程循环监听第一预设队列中是否有定时器任务进入的第一监听子单元521。任务添加单元53当监听到第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列。第二监听单元M循环监听第二预设队列是否有定时器任务进入。第二监听单元 M可以包括用于调用第二监听线程循环监听第二预设队列中是否有定时器任务进入的第二监听子单元Ml。任务处理单元55当监听到第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。实施例六在本发明实施例中,采用线程池执行定时器任务,从而防止了频繁的线程创建与销毁引起的大量系统资源浪费,使得更多的CPU时间和内存用来处理实际的定时器任务 (例如,商业应用)。图6示出了本发明实施例六提供的定时器任务自动处理系统的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括第一监听单元61循环监听第一预设队列中是否有定时器任务进入。任务添加单元62当监听到第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列。第二监听单元63循环监听第二预设队列是否有定时器任务进入。任务处理单元64当监听到第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。任务处理子单元641当监听到第二预设队列中有定时器任务进入时,将定时器任务添加到预先创建的线程池,控制线程池执行所述定时器任务。在本发明实施例中,当线程池的缓存队列未满时,如果线程池的缓存队列为空,则可以唤醒一个休眠的线程立即执行该定时器任务,如果线程池的缓存队列不为空,则将定时器任务添加缓冲队列,等待被执行,当排在其前方的定时器任务被执行完成时,则执行该任务。判断子单元642判断线程池的缓存队列是否已满。监听阻塞子单元643当线程池缓存队列已满时,阻塞第二预设队列的监听。任务写入单元65当处理进入的定时器任务失败时,将定时器任务写入第三预设队列中。本发明实施例对第一预设队列进行循环监听,当监听到有定时器任务进入时,将定时器任务添加到第二预设队列,同时,循环监听第二预设队列是否有定时器任务进入,当监听到第二预设队列中有定时器任务进入时,将定时器任务添加到线程池,由线程池中的线程进行执行,从而大大减少线程的创建和销毁次数,提高了任务的并发处理能力,进而提高了系统资源的利用率和用户体验。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种定时器任务自动处理方法,其特征在于,所述方法包括下述步骤 循环监听第一预设队列中是否有定时器任务进入;当监听到所述第一预设队列中有定时器任务进入时,将定时器任务添加到第二预设队列;循环监听所述第二预设队列是否有定时器任务进入;当监听到所述第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。
2.如权利要求1所述的方法,其特征在于,所述循环监听第一预设队列中是否有定时器任务进入的步骤之前,所述方法还包括创建第一监听线程和第二监听线程;所述循环监听第一预设队列中是否有定时器任务进入的步骤具体为调用所述第一监听线程循环监听第一预设队列中是否有定时器任务进入; 所述循环监听第二预设队列中是否有定时器任务进入的步骤具体为 调用所述第二监听线程循环监听第二预设队列中是否有定时器任务进入。
3.如权利要求1所述的方法,其特征在于,所述当监听到所述第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务的步骤具体为当监听到所述第二预设队列中有定时器任务进入时,将所述定时器任务添加到预先创建的线程池,控制所述线程池执行所述定时器任务。
4.如权利要求3所述的方法,其特征在于,将所述定时器任务添加到预先创建的线程池的步骤之后,控制所述线程池执行所述定时器任务的步骤之前,所述方法还包括判断所述线程池的缓存队列是否已满;当所述线程池缓存队列已满时,阻塞所述第二预设队列的监听;当所述线程池缓存队列未满时,执行控制所述线程池执行所述定时器任务的步骤。
5.如权利要求1或4所述的方法,其特征在于,所述当监听到所述第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务的步骤之后,所述方法还包括当处理进入的定时器任务失败时,将所述定时器任务写入第三预设队列中。
6.一种定时器任务自动处理系统,其特征在于,所述系统包括第一监听单元,用于循环监听第一预设队列中是否有定时器任务进入; 任务添加单元,用于当监听到第一预设队列中有定时器任务进入时,将所述定时器任务添加到第二预设队列;第二监听单元,用于循环监听第二预设队列是否有定时器任务进入;以及任务处理单元,用于当监听到所述第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。
7.如权利要求6所述的系统,其特征在于,所述系统还包括 线程创建单元,用于创建第一监听线程和第二监听线程;所述第一监听单元包括第一监听子单元,用于调用所述第一监听线程循环监听第一预设队列中是否有定时器任务进入;所述第二监听单元包括第二监听子单元,用于调用所述第二监听线程循环监听第二预设队列中是否有定时器任务进入。
8.如权利要求6所述的系统,其特征在于,所述任务处理单元包括任务处理子单元,用于当监听到第二预设队列中有定时器任务进入时,将定时器任务添加到预先创建的线程池,控制所述线程池执行所述定时器任务。
9.如权利要求8所述的系统,其特征在于,所述任务处理单元还包括 判断子单元,用于判断所述线程池的缓存队列是否已满;监听阻塞子单元,用于当所述线程池缓存队列已满时,阻塞所述第二预设队列的监听。
10.如权利要求6或9所述的系统,其特征在于,所述系统还包括任务写入单元,用于当处理进入的定时器任务失败时,将所述定时器任务写入第三预设队列中。
全文摘要
本发明适用于计算机技术领域,提供了一种定时器任务自动处理方法及系统,所述方法包括下述步骤循环监听第一预设队列中是否有定时器任务进入;当监听到所述第一预设队列中有定时器任务进入时,将所述定时器任务添加到第二预设队列;循环监听所述第二预设队列是否有定时器任务进入;当监听到所述第二预设队列中有定时器任务进入时,调用对应的线程处理进入的定时器任务。本发明解决了现有技术无法实现定时器任务并发处理,系统资源的利用率低的问题,通过调用对应的线程对定时器任务进行处理,提高了任务的并发处理能力,进而提高了系统资源的利用率。
文档编号G06F9/48GK102426539SQ20111034170
公开日2012年4月25日 申请日期2011年11月1日 优先权日2011年11月1日
发明者徐波, 李坤保, 肖海涛 申请人:深圳市航天泰瑞捷电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1