首页> 中国专利> 基于线程池执行任务的方法和系统

基于线程池执行任务的方法和系统

摘要

本发明的主要目的是提供一种基于线程池执行任务的方法和系统,有助于使线程池能够暂停处理任务以及在暂停后恢复处理任务。该方法包括:管理装置根据外部操作,向线程池中的每一个线程发布暂停状态标识,该暂停状态标识的值表示暂停状态或非暂停状态;所述线程在未执行任务的状态下检查本线程内的所述暂停状态标识,在该暂停状态标识的值是表示暂停状态的情况下挂起本线程并开始计时,在计时达到预设时长后再次进行所述检查,直至该暂停状态标识的值是表示非暂停状态;在该暂停状态标识的值是表示非暂停状态的情况下,所述线程从任务队列获取任务并执行该任务,并且在执行完成该任务后再次进行所述检查。

著录项

  • 公开/公告号CN106325977A

    专利类型发明专利

  • 公开/公告日2017-01-11

    原文格式PDF

  • 申请/专利号CN201510342900.9

  • 发明设计人 李连志;陈有存;赖晨东;

    申请日2015-06-19

  • 分类号G06F9/46;

  • 代理机构中原信达知识产权代理有限责任公司;

  • 代理人姜劲

  • 地址 100080 北京市海淀区杏石口路65号西杉创意园四区11C楼东段1-4层西段1-4层

  • 入库时间 2023-06-19 01:18:44

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-01

    授权

    授权

  • 2017-12-12

    实质审查的生效 IPC(主分类):G06F9/46 申请日:20150619

    实质审查的生效

  • 2017-01-11

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,特别地涉及一种基于线程池执行任务的方法和系统。

背景技术

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。

对于现有的线程池处理机制,启动初始化时就确定好了线程池的核心线程数或最大线程数,线程只能启动和停止,而强制的停止线程池易造成任务丢失,或者处理不完整,同时现有的线程池在不销毁重新创建的情况下无法手工调节线程池内线程的数量。也不支持限流限速的功能,不支持暂停以及在暂停后恢复处理的功能。

发明内容

有鉴于此,本发明的主要目的是提供一种基于线程池执行任务的方法和系统,有助于使线程池能够暂停处理任务以及在暂停后恢复处理任务。本发明的另一目的是有助于灵活调节线程池内线程数量。本发明的再一目的是有助于达到单线程控制流速。本发明的其他目的可以根据具体实施方式得出。

为实现上述目的,根据本发明的一个方面,提供了一种基于线程池执行任务的方法。

本发明的基于线程池执行任务的方法包括:管理装置根据外部操作,向线程池中的每一个线程发布暂停状态标识,该暂停状态标识的值表示暂停状态或非暂停状态;所述线程在未执行任务的状态下检查本线程内的所述暂停状态标识,在该暂停状态标识的值是表示暂停状态的情况下挂起本线程并开始计时,在计时达到预设时长后再次进行所述检查,直至该暂停状态标识的值是表示非暂停状态;在该暂停状态标识的值是表示非暂停状态的情况下,所述线程从任务队列获取任务并执行该任务,并且在执行完成该任务后再次进行所述检查。

可选地,还包括:管理装置在收到外部操作提供的线程数量设置值后,判断所述线程池中线程的数量是否大于所述线程数量设置值;若是,则选择线程然后设置选择的线程的工作状态标识为结束,所选择的线程的数量是所述线程池中线程的数量减去所述线程数量设置值得到的差值;若否,则创建多个线程然后加入线程池,所述多个线程的数量是所述线程数量设置值减去所述线程池中线程的数量得到的差值;所述线程在执行完成任务后判断本线程的工作状态标识是否为结束,若是,则删除本线程;否则继续从所述任务队列获取任务并执行该任务。

可选地,所述选择线程的步骤包括:管理装置遍历线程池中的线程,在遍历的线程的数量达到所述线程数量设置值时,将未遍历的线程作为选择的线程。

可选地,该方法还包括:管理装置根据外部操作,向线程池中的线程发布休眠时长;在所述执行完成该任务之后,并且在进行所述判断本线程的工作状态标识是否为结束之前,该方法还包括:线程根据所述休眠时长进行休眠。

根据本发明的另一方面,提供了一种基于线程池执行任务的系统。

本发明的基于线程池执行任务的系统包括任务队列、管理装置、以及包含多个线程池的,其中:任务队列用于保存多个任务;管理装置用于根据外部操作,向线程池中的每一个线程发布暂停状态标识,该暂停状态标识的值表示暂停状态或非暂停状态;线程用于在未执行任务的状态下检查本线程内的所述暂停状态标识,在该暂停状态标识的值是表示暂停状态的情况下挂起本线程并开始计时,在计时达到预设时长后再次进行所述检查,直至该暂停状态标识的值是表示非暂停状态;在该暂停状态标识的值是表示非暂停状态的情况下,所述线程从任务队列获取任务并执行该任务,并且在执行完成该任务后再次进行所述检查。

可选地,所述管理装置还用于:在收到外部操作提供的线程数量设置值后,判断所述线程池中线程的数量是否大于所述线程数量设置值;若是,则选择线程然后设置选择的线程的工作状态标识为结束,所选择的线程的数量是所述线程池中线程的数量减去所述线程数量设置值得到的差值;若否,则创建多个线程然后加入线程池,所述多个线程的数量是所述线程数量设置值减去所述线程池中线程的数量得到的差值;所述线程还用于:在执行完成任务后判断本线程的工作状态标识是否为结束,若是,则删除本线程;否则继续从所述任务队列获取任务并执行该任务。

可选地,所述管理装置还用于遍历线程池中的线程,在遍历的线程的数量达到所述线程数量设置值时,将未遍历的线程作为选择的线程。

可选地,所述管理装置还用于根据外部操作,向线程池中的线程发布休眠时长;所述线程还用于在所述执行完成该任务之后,并且在进行所述判断本线程的工作状态标识是否为结束之前,根据所述休眠时长进行休眠。

根据本发明的技术方案,统一向线程池中的线程发布暂停状态标识以控制线程为暂停或非暂停状态,从而使线程池能够暂停处理任务以及在暂停后恢复处理任务;设定线程池内线程数量,再通过向指定的线程设置工作状态标识为结束,或者向线程池添加线程,可以实现减小或增加线程池内的线程数量;对线程统一设置休眠时长,可以实现单线程控制流速。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的基于线程池执行任务的系统的基本结构的示意图;

图2是根据本发明实施方式的基于线程池执行任务的方法的一种流程的示意图。

具体实施方式

以下结合附图对本发明的示范性实施方式做出说明,其中包括本发明实施方式的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施方式做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

图1是根据本发明实施例的基于线程池执行任务的系统的基本结构的示意图。如图1所示,基于线程池执行任务的系统10主要包括任务队列11、线程池12、以及管理装置13。其中线程池12中有多个线程,即图中示出的线程1、线程2、……、线程N。该系统1可供外部应用系统20使用。系统1在初始化时,由操作人员设置线程池初始大小以及任务在线程中执行的间隔时间,建立上述系统1的实例,其中包含了初始化的任务队列、线程池以及管理装置。在初始化完成后,外部应用系统2获取一批任务,然后加入系统1的任务队列11中,线程池12获取队列中的任务开始执行。

在线程池运行的过程中,管理装置13记录所有线程工作状态,记录本批次执行的任务数,计算单位时间内完成的任务数,计算出TPS,掌握本批次或者最近一段时间任务的执行速度。这些数据在管理装置13的状态值中保存,外部应用系统2可以直接从管理装置13中获取到相关的数据,以便参考如何调整系统1的工作状态。

任务的获取和添加支持两种方式:一种方式是一次性向任务队列11中加入本批次要执行的任务,待任务执行完添加下一批次任务;另一种方式是持续的向任务队列11中加入任务,任务队列11有一个队列的最大限制,如果队列中的未消费任务数量达到最大上限则拒绝外部继续向队列中添加新任务,如果队列消费任务小于最大数量才允许继续向队列中添加新任务。队列的消费与任务的添加都是现成安全的,队列为空时各消费队列任务的线程都处于阻塞状态。

在一次性执行批量任务执行时,可使用一个同步辅助类,在其他线程没有消费完当前的任务时,执行任务的外部线程一直等待,直到所有任务都执行完成。这样外部线程可以有计划的控制任务数量,和评估批次任务的执行时间,便于外部进行调节任务的执行的速度。线程池12内每个线程都试图从任务队列11中获取任务,如果任务队列11中没有任务则各线程阻塞等待,直到向任务队列11中添加任务,各线程拿到任务后执行。

以下对于本发明实施方式中的实现线程池处理线程的暂停以及在暂停后恢复处理的方案做出说明。每一个线程内都有一个线程执行的暂停状态标识与线程启动停止的标识,此标识由管理装置根据人员的外部操作发布,其值表示暂停状态或非暂停状态。当管理装置发布暂停标识后,每个线程在启动后是循环的从任务队列中获取任务以及执行,即先取到一个任务,然后执行,接下来再从任务队列中取一个任务然后再执行,依此类推。在每取一个任务之前,线程检查暂停状态标识,看其值是否表示暂停状态,若是则线程挂起,不再从任务队列中获取任务执行,挂起时间长度到达预先的设定值后,线程自动唤醒然后继续检查暂停标识的值是否改变(因为由于管理装置的控制,有可能在暂停后再恢复处理,此时暂停标识的值将改变),若改变则开始从任务队列中获取任务,重新开始正常运行。暂停状态由管理装置统一管理,所有线程池内的线程共享使用此暂停状态,一旦暂停状态改变,在线程池内所有线程运行到需要校验暂停状态的时候都确认自己是需要暂停还是恢复继续往下执行。管理装置根据发布的暂停状态标识的值的改变来达到控制线程池内所有线程暂停、恢复的功能。在任务执行完后、获取下次任务并执行开始前,需要校验暂停状态,而不是在任务执行过程中立即执行,任务执行本身不存在暂停和恢复状态。任务一旦执行必须等到执行完,不能被中断,也就是说任务是一个原子的操作单元。

以下对于本发明实施方式中的调节线程池内线程的数量的技术方案加以说明。在需要调节线程池内的线程的数量的情况下,外部应用调用管理装置的接口,向管理装置提供人员设置的线程数量设置值,管理装置收到该设置值后,根据该设置值与当前线程池内线程的数量之间的大小关系,就可以确定是需要减少还是增加线程池内线程数量。如果线程池内的线程数量大于上述设置值,则选择一些线程并且设置这些线程的工作状态标识为结束,这些线程的数量即为线程池内线程的数量减去上述设置值得到的差值。每个线程运行任务完成的时候需要校验本线程的工作状态标识是否为结束,如果为结束则线程本身运行结束,不再从任务队列内取任务,并且删除本线程,具体可回调线程池内的方法,使线程池将本线程删除。每个线程经过这样的处理后,线程内的线程数量就降到人员设置的数量。

以上过程中,管理装置在选择线程时,可以一边选择一边计数,直到选择的线程数量达到上述的差值。管理装置也可以遍历线程池中的线程,在遍历的线程的数量达到上述线程数量设置值时,将未遍历的线程作为选择的线程,此时可以继续遍历这些线程并在遍历时设置这些线程的工作状态标识为结束。

如果线程池内的线程数量小于线程数量设置值,则管理装置根据线程数量设置值与线程池内的线程数量的差值,创建数目为该差值的线程然后加入线程池,新加入的线程参与正常的工作,即按前述的流程执行。

为了达到单线程控制流速,管理装置根据人员的操作,可以向线程池内的部分或所有线程发布休眠时长。在线程完成任务之后,先根据休眠时长进行休眠,然后再判断本线程的工作状态标识是否为结束。在进行休眠的情况下,线程池的处理速度被限制,在一些应用场景中有助于减轻下游系统的压力。

以上描述的流程可统一示于图2中,图2是根据本发明实施方式的基于线程池执行任务的方法的一种流程的示意图。如图2所示,在线程启动后,先判断暂停状态标识(步骤S21),若表示暂停,则延时(步骤S22)之后返回步骤S21;若表示非暂停,则从任务队列获取任务(步骤S23),可以对于获取任务的操作判断是否超时(步骤S24),若是,则直接判断线程的工作状态标识是否为结束(步骤S27)并且若是,则删除本线程(步骤S28);若未超时,说明任务成功获取,此时线程执行任务(步骤S25)。在任务执行完成后,按休眠时长进行休眠(步骤S26),然后进入步骤S27。这里是以需要休眠为例,如管理装置未发布休眠时长,则任务执行完成后直接进入步骤S27。如果步骤S27的判断结果为工作状态标识不是结束,则返回步骤S21。

根据本发明实施方式,统一向线程池中的线程发布暂停状态标识以控制线程为暂停或非暂停状态,从而使线程池能够暂停处理任务以及在暂停后恢复处理任务;设定线程池内线程数量,再通过向指定的线程设置工作状态标识为结束,或者向线程池添加线程,可以实现减小或增加线程池内的线程数量;对线程统一设置休眠时长,可以实现单线程控制流速。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号