CN112052094A - 一种基于多线程的任务执行方法 - Google Patents
一种基于多线程的任务执行方法 Download PDFInfo
- Publication number
- CN112052094A CN112052094A CN202010938953.8A CN202010938953A CN112052094A CN 112052094 A CN112052094 A CN 112052094A CN 202010938953 A CN202010938953 A CN 202010938953A CN 112052094 A CN112052094 A CN 112052094A
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- queue
- threads
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明涉及多线程技术领域,具体提供了一种基于多线程的任务执行方法,建立线程池,初次建立线程放入线程池,线程数据根据实际情况设置初始值,并设置最大线程数量,当实际使用过程中线程数量不足以满足实际时会新建线程放入线程池中,当有空闲线程并且总线程数据量大于初始值时会杀死线程并从线程池中剔除,使线程池中的线程数量等于初始值;当执行任务量大于最大线程数量时,任务执行进入阻塞排队状态,通过动态代理的方式对不同任务进行新建及执行。与现有技术相比,本发明方便项目中使用,适用于多项目之间的任务调用执行。可以减少项目的开发量,减少项目中的代码冗余,方便后期项目的维护开发工作。
Description
技术领域
本发明涉及多线程技术领域,具体提供一种基于多线程的任务执行方法。
背景技术
对于web项目或者其他的项目中,常常会涉及到任务的执行,并且任务的类型可能涉及到多重,不同的任务可能涉及到定时执行。如果每种类型的任务都自定义一套任务执行工具,会造成项目中代码的冗余,增加后期代码的维护难度。
发明内容
本发明是针对上述现有技术的不足,提供一种实用性强的基于多线程的任务执行方法。
本发明解决其技术问题所采用的技术方案是:
一种基于多线程的任务执行方法,建立线程池,初次建立线程放入线程池,线程数据根据实际情况设置初始值,并设置最大线程数量,当实际使用过程中线程数量不足以满足实际时会新建线程放入线程池中,当有空闲线程并且总线程数据量大于初始值时会杀死线程并从线程池中剔除,使线程池中的线程数量等于初始值;
当执行任务量大于最大线程数量时,任务执行进入阻塞排队状态,通过动态代理的方式对不同任务进行新建及执行。
进一步的,具体有如下步骤:
首先,设置配置参数,设置初始线程数量值,每次增加线程增量值,最大线程数量值;
然后,新建线程池生成类,初始化初始线程数量的线程放入线程池中,并配置线程生成类随系统启动。
进一步的,设置线程新增程序,当线程数据量不够时,新建参数中增量值数量的线程并放入线程池中,增加动态代理类,供生成不同的任务执行类。
进一步的,增加队列任务信息T_manager_queue,存储执行中的任务的执行状态,调用服务器名称及端口、任务名称、任务类别和执行类信息。
进一步的,启动任务信息T_manager_queue监听程序,监听T_manager_queue增加的任务,并从T_manager_queue中拿取任务,并存储到任务待分配队列wait_distribute_queue中。
进一步的,启动程序监听wait_distribute_queue队列,如果有新的任务,并且有空闲线程则从移除wait_distribute_queue队列中的任务,分配到负载均衡的服务器中的wait_start_queue队列中。
进一步的,启动程序监听队列wait_start_queue,当有线程空闲时,将任务从wait_start_queue队列中移除,并插入到running_queue,并更改对应的T_manager_queue中对应任务的执行状态,并根据任务信息中的类信息,动态代理生成对应的任务执行类,启动任务。
进一步的,任务执行成功后,从running_queue中的对应的任务信息剔除,并更改T_manager_queue队列中的任务信息,通过rpc回调通知执行类,任务执行效果。
本发明的一种基于多线程的任务执行方法和现有技术相比,具有以下突出的有益效果:
整合项目中要执行的任务类型,合并并提取成工具,直接进入到需要的项目中。方便项目中使用,适用于多项目之间的任务调用执行。可以减少项目的开发量,减少项目中的代码冗余,方便后期项目的维护开发工作。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种基于多线程的任务执行方法的流程示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
如图1所示,本实施例中的一种基于多线程的任务执行方法,建立线程池,初次建立10个线程放入线程池,线程数据根据实际情况设置初始值,并设置最大线程数量,当实际使用过程中线程数量不足以满足实际时会新建线程放入线程池中,当有空闲线程并且总线程数据量大于初始值时会杀死线程并从线程池中剔除,使线程池中的线程数量等于初始值;
当执行任务量大于最大线程数量时,任务执行进入阻塞排队状态,通过动态代理的方式对不同任务进行新建及执行。
具体实现步骤如下:
S1、设置配置参数,设置初始线程数量值,每次增加线程增量值,最大线程数量值。
S2、新建线程池生成类,初始化初始线程数量的线程放入线程池中,并配置线程生成类随系统启动。
S3、设置线程新增程序,当线程数据量不够时,新建参数中增量值数量的线程并放入线程池中。
S4、增加动态代理类,供生成不同的任务执行类。
S5、增加队列任务信息T_manager_queue,存储执行中的任务的执行状态,调用服务器名称及端口,任务名称,任务类别,执行类信息等。
S6、启动任务信息T_manager_queue监听程序,监听T_manager_queue增加的任务,并从T_manager_queue中拿取任务,并存储到任务待分配队列wait_distribute_queue中。
S7、启动程序监听wait_distribute_queue队列,如果有新的任务,并且有空闲线程则从移除wait_distribute_queue队列中的任务,分配到负载均衡的服务器中的wait_start_queue队列中。
S8、启动程序监听队列wait_start_queue,当有线程空闲时,将任务从wait_start_queue队列中移除,并插入到running_queue,并更改对应的T_manager_queue中对应任务的执行状态。并根据任务信息中的类信息,动态代理生成对应的任务执行类,启动任务。
S9、任务执行成功后,从running_queue中的对应的任务信息剔除,并更改T_manager_queue队列中的任务信息,通过rpc回调通知执行类,任务执行效果。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种基于多线程的任务执行方法权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (8)
1.一种基于多线程的任务执行方法,其特征在于,建立线程池,初次建立线程放入线程池,线程数据根据实际情况设置初始值,并设置最大线程数量,当实际使用过程中线程数量不足以满足实际时会新建线程放入线程池中,当有空闲线程并且总线程数据量大于初始值时会杀死线程并从线程池中剔除,使线程池中的线程数量等于初始值;
当执行任务量大于最大线程数量时,任务执行进入阻塞排队状态,通过动态代理的方式对不同任务进行新建及执行。
2.根据权利要求1所述的一种基于多线程的任务执行方法,其特征在于,具体有如下步骤:
首先,设置配置参数,设置初始线程数量值,每次增加线程增量值,最大线程数量值;
然后,新建线程池生成类,初始化初始线程数量的线程放入线程池中,并配置线程生成类随系统启动。
3.根据权利要求2所述的一种基于多线程的任务执行方法,其特征在于,
设置线程新增程序,当线程数据量不够时,新建参数中增量值数量的线程并放入线程池中,增加动态代理类,供生成不同的任务执行类。
4.根据权利要求3所述的一种基于多线程的任务执行方法,其特征在于,增加队列任务信息T_manager_queue,存储执行中的任务的执行状态,调用服务器名称及端口、任务名称、任务类别和执行类信息。
5.根据权利要求4所述的一种基于多线程的任务执行方法,其特征在于,启动任务信息T_manager_queue监听程序,监听T_manager_queue增加的任务,并从T_manager_queue中拿取任务,并存储到任务待分配队列wait_distribute_queue中。
6.根据权利要求5所述的一种基于多线程的任务执行方法,其特征在于,启动程序监听wait_distribute_queue队列,如果有新的任务,并且有空闲线程则从移除wait_distribute_queue队列中的任务,分配到负载均衡的服务器中的wait_start_queue队列中。
7.根据权利要求6所述的一种基于多线程的任务执行方法,其特征在于,启动程序监听队列wait_start_queue,当有线程空闲时,将任务从wait_start_queue队列中移除,并插入到running_queue,并更改对应的T_manager_queue中对应任务的执行状态,并根据任务信息中的类信息,动态代理生成对应的任务执行类,启动任务。
8.根据权利要求7所述的一种基于多线程的任务执行方法,其特征在于,任务执行成功后,从running_queue中的对应的任务信息剔除,并更改T_manager_queue队列中的任务信息,通过rpc回调通知执行类,任务执行效果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010938953.8A CN112052094A (zh) | 2020-09-09 | 2020-09-09 | 一种基于多线程的任务执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010938953.8A CN112052094A (zh) | 2020-09-09 | 2020-09-09 | 一种基于多线程的任务执行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112052094A true CN112052094A (zh) | 2020-12-08 |
Family
ID=73610567
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010938953.8A Pending CN112052094A (zh) | 2020-09-09 | 2020-09-09 | 一种基于多线程的任务执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052094A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112688935A (zh) * | 2020-12-22 | 2021-04-20 | 浪潮卓数大数据产业发展有限公司 | 一种基于多线程的数据加密推送方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
-
2020
- 2020-09-09 CN CN202010938953.8A patent/CN112052094A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
Non-Patent Citations (1)
Title |
---|
HALF: "JAVA代理模式的理解和应用", 《HTTPS://SEGMENTFAULT.COM/A/1190000019684255》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112688935A (zh) * | 2020-12-22 | 2021-04-20 | 浪潮卓数大数据产业发展有限公司 | 一种基于多线程的数据加密推送方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106802826B (zh) | 一种基于线程池的业务处理方法及装置 | |
CN109582455B (zh) | 多线程任务处理方法、装置及存储介质 | |
CN109582447B (zh) | 计算资源分配方法、任务处理方法及装置 | |
US20030233485A1 (en) | Event queue | |
CN107391243B (zh) | 线程任务处理设备、装置及方法 | |
CN107273182B (zh) | 一种虚拟机资源动态扩充方法及系统 | |
CN111949386A (zh) | 一种任务调度方法、系统、计算装置及可读存储介质 | |
CN108762905B (zh) | 一种多任务事件的处理方法和装置 | |
CN110673927B (zh) | 一种虚拟机的调度方法和装置 | |
CN106528065B (zh) | 一种线程获取方法及设备 | |
CN109660569B (zh) | 一种多任务并发执行方法、存储介质、设备及系统 | |
CN107479981B (zh) | 一种基于异步调用实现同步调用的处理方法及装置 | |
CN112817710B (zh) | 定时任务处理方法、系统、计算机设备及计算机存储介质 | |
CN108717380B (zh) | 消息处理方法和装置 | |
CN112052094A (zh) | 一种基于多线程的任务执行方法 | |
CN111767125B (zh) | 任务执行方法、装置、电子设备、存储介质 | |
CN111104218B (zh) | 存储系统数据同步方法、装置、设备及可读存储介质 | |
CN112860401A (zh) | 任务调度方法、装置、电子设备和存储介质 | |
CN111708618A (zh) | 一种基于Java多线程的处理方法和装置 | |
CN116661960A (zh) | 一种批量任务处理方法、装置、设备以及存储介质 | |
CN111176847B (zh) | 物理核超多线程服务器上大数据集群性能优化方法及装置 | |
CN113342512B (zh) | 一种io任务静默与驱动方法、装置及相关设备 | |
CN112835692B (zh) | 一种日志消息驱动任务方法、系统、存储介质及设备 | |
CN111290868B (zh) | 任务处理方法、装置和系统以及流程引擎 | |
CN111400368B (zh) | 一种分布式服务器系统的日志查找方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201208 |
|
RJ01 | Rejection of invention patent application after publication |