CN108345499B - 统一线程池处理方法、应用服务器及计算机可读存储介质 - Google Patents
统一线程池处理方法、应用服务器及计算机可读存储介质 Download PDFInfo
- Publication number
- CN108345499B CN108345499B CN201810102252.3A CN201810102252A CN108345499B CN 108345499 B CN108345499 B CN 108345499B CN 201810102252 A CN201810102252 A CN 201810102252A CN 108345499 B CN108345499 B CN 108345499B
- Authority
- CN
- China
- Prior art keywords
- thread pool
- thread
- queue
- pool
- name
- 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.)
- Active
Links
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种统一线程池处理方法,包括:查询持久化数据表;根据所述持久化数据表,获取执行队列中每一个线程池的参数,所述每一个线程池的参数包括每一个线程池名称;根据所述每一个线程池的参数分别创建每一个线程池对象;根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列;通过所述线程池队列管理所述每一个线程池。本发明还提供一种应用服务器及计算机可读存储介质。本发明提供的统一线程池处理方法、应用服务器及计算机可读存储介质能够实现对每一个线程池对象的统一管理,降低了系统资源消耗,提升了系统的稳定性。
Description
技术领域
本发明涉及数据分析技术领域,尤其涉及一种统一线程池处理方法、应用服务器及计算机可读存储介质。
背景技术
当前,在互联网技术中线程池得到了广泛的应用,通过引入线程池可以有效的管理线程、控制线程上限总数、以及减少创建和销毁线程所带来的开销。在实际应用中,随着业务的发展,系统中多处业务也会使用到线程池,例如敏感日志批量入库错误,重新入表、MQCP日志接收队列及公共清理等业务。线程池作用就是限制系统中执行线程的数量。根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。
当一个系统对其他越来越多的系统调用增加,线程池技术面临着新的挑战:如果不对线程池进行统一管理,很容易出现高并发状况下线程紊乱或资源消耗的问题,严重影响系统稳定。
发明内容
有鉴于此,本发明提出一种统一线程池处理方法、应用服务器及计算机可读存储介质,以解决在高并发状况下线程紊乱或资源消耗严重影响系统稳定的问题。
首先,为实现上述目的,本发明提出一种统一线程池处理方法,该方法包括步骤:
查询持久化数据表;
根据所述持久化数据表,获取执行队列中每一个线程池的参数,所述每一个线程池的参数包括每一个线程池名称;
根据所述每一个线程池的参数分别创建每一个线程池对象;
根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列;及
通过所述线程池队列管理所述每一个线程池。
可选地,所述每一个线程池的参数还包括核心线程数,最大线程数,最大队列长度,队列类型。
可选地,所述根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列的步骤具体包括:
获取所述每一个线程池名称与所述每一个线程池对象的映射关系;
以Map类保存所述每一个线程池名称与所述每一个线程池对象的映射关系并创建所述线程池队列。
可选地,所述根据所述每一个线程池的参数分别创建每一个线程池对象的步骤具体包括:
收集所述每一个线程池的参数;
通过java.uitl.concurrent.ThreadPoolExecutor类创建线程池。
可选地,所述通过所述线程池队列管理所述每一个线程池的步骤具体包括:
获取欲操作的线程池的第一线程池名称;
根据所述第一线程池名称从所述线程池队列中获取对应的第一线程池对象;
对所述第一线程池对象进行管理操作,所述管理操作可以包括:获取所述第一线程池对象线程数、提交任务至所述第一线程池对象及关闭所述第一线程池对象。
此外,为实现上述目的,本发明还提供一种应用服务器,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的统一线程池处理系统,所述统一线程池处理系统被所述处理器执行时实现如上述的统一线程池处理方法的步骤。
进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有统一线程池处理系统,所述统一线程池处理系统可被至少一个处理器执行,以使所述至少一个处理器执行如上述的统一线程池处理方法的步骤。
相较于现有技术,本发明所提出的统一线程池处理方法、应用服务器及计算机可读存储介质,可以通过查询持久化数据表获取每一个线程池的参数,并根据所述每一个线程池的参数分别创建每一个线程池对象,实现了对线程池的统一创建;通过创建线程池队列保存每一个线程池名称与每一个所述线程池对象的映射关系,并根据所述线程池队列实现了对每一个所述线程池对象的统一管理,降低了系统资源消耗,提僧了系统的稳定性。
附图说明
图1是本发明应用服务器一可选的硬件架构的示意图;
图2是本发明统一线程池处理系统第一实施例的程序模块示意图;
图3是本发明统一线程池处理系统第二实施例的程序模块示意图;
图4是本发明统一线程池处理方法第一实施例的流程示意图;
图5是本发明统一线程池处理方法第二实施例的流程示意图;
图6是本发明统一线程池处理方法第三实施例的流程示意图。
附图标记:
应用服务器 | 2 |
存储器 | 11 |
处理器 | 12 |
网络接口 | 13 |
统一线程池处理系统 | 200 |
查询模块 | 201 |
获取模块 | 202 |
线程池对象创建模块 | 203 |
线程池队列创建模块 | 204 |
管理模块 | 205 |
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
参阅图1所示,是本发明应用服务器2一可选的硬件架构的示意图。
本实施例中,所述应用服务器2可包括,但不仅限于,可通过系统总线相互通信连接存储器11、处理器12、网络接口13。需要指出的是,图1仅示出了具有组件11-13的应用服务器2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
其中,所述应用服务器2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等计算设备,该应用服务器2可以是独立的服务器,也可以是多个服务器所组成的服务器集群。
所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述应用服务器2的内部存储单元,例如该应用服务器2的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述应用服务器2的外部存储设备,例如该应用服务器2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。当然,所述存储器11还可以既包括所述应用服务器2的内部存储单元也包括其外部存储设备。本实施例中,所述存储器11通常用于存储安装于所述应用服务器2的操作系统和各类应用软件,例如统一线程池处理系统200的程序代码等。此外,所述存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述应用服务器2的总体操作。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行所述的统一线程池处理系统200等。
所述网络接口13可包括无线网络接口或有线网络接口,该网络接口13通常用于在所述应用服务器2与其他电子设备之间建立通信连接。
至此,己经详细介绍了本发明相关设备的硬件结构和功能。下面,将基于上述介绍提出本发明的各个实施例。
首先,本发明提出一种统一线程池处理系统200。
参阅图2所示,是本发明统一线程池处理系统200第一实施例的程序模块图。
本实施例中,所述统一线程池处理系统200包括一系列的存储于存储器11上的计算机程序指令,当该计算机程序指令被处理器12执行时,可以实现本发明各实施例的统一线程池处理操作。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,统一线程池处理系统200可以被划分为一个或多个模块。例如,在图2中,所述统一线程池处理系统200可以被分割成查询模块201、获取模块202、线程池对象创建模块203及线程池队列创建模块204。其中:
所述查询模块201,用于查询持久化数据表。
具体地,需要从key-value数据库中读取所述持久化数据表,在一实施例中,所述key-value数据库可以为Redis数据库。
所述持久化数据表用于存储执行队列中每一个线程池对象的参数信息,所述参数信息包括线程池名称、核心线程数、最大线程数、最大队列长度、队列类型。
在本实施例中,所述持久化方法为根据一定的保存规则定期对Redis在内存中的数据做一个快照,把快照数据同步到硬盘上,每次的快照文件就是一个保存着redis数据的二进制文件。
所述获取模块202,用于根据所述持久化数据表,获取执行队列中每一个线程池的参数。
具体地,所述每一个线程池的参数包括线程池名称、核心线程数、最大线程数、最大队列长度、队列类型。
其中所述核心线程数(corePoolSize)中的核心线程会一直存活,即使没有任务需要执行。当正在运行的线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。
在一实施例中,当需要添加一个任务至第一线程池时,若第一线程池中正在运行的线程数量小于核心线程数,那么第一线程池马上创建线程运行这个任务;若第一线程池中正在运行的线程数量大于或等于核心线程数,那么将这个任务放入第一线程池的任务队列中。
所述最大线程数(maximumPoolSize)用于表示在线程池中最多能创建多少个线程。
在一实施例中,当需要添加一个任务至第一线程池时,若第一线程池的任务队列已满(即已达到最大队列长度),而且正在运行的线程数量小于最大线程数,那么还是要创建新的线程运行这个任务;
在进一步的实施例中,当需要添加一个任务至第一线程池时,如果队列已满(即已达到最大队列长度),而且正在运行的线程数量大于或等于最大线程数,第一线程池将抛出异常。
所述队列类型包括:直接提交队列,无界队列及有界队列。
其中,所述直接提交队列可以为SynchronousQueue。在一实施例中,可以设置SynchronousQueue为工作队列的默认选项,所述直接提交队列直接提交给线程而不需要排队。若不存在可用于立即运行任务的线程,所述直接提交队列把任务加入队列失败,因此会构造一个新的线程。此策略可以避免在处理可能具有内部依赖性的请求集时出现锁。所述直接提交队列通常要求无界最大线程数以避免拒绝新提交的任务。当命令以超过队列所能处理的平均数连续到达时,此策略允许无界线程具有增长的可能性。
所述有界队列可以为ArrayBlockingQueue。其中ArrayBlockingQueue为基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序。
所述无界队列可以为LinkedBlockingQueue。LinkedBlockingQueue为基于链表结构的阻塞队列,此队列按FIFO(先进先出)排序元素,吞吐量通常要高于ArrayBlockingQueue。
所述线程池对象创建模块203,用于根据所述每一个线程池的参数分别创建每一个线程池对象。
具体地,通过java.uitl.concurrent.ThreadPoolExecutor类创建线程池,具体创建方法为:
其中,keepAliveTime表示线程没有任务执行时最多保持多久时间会终止。unit为参数keepAliveTime的时间单位;其中,threadFactory为线程工厂,用于创建线程;其中,handler为当拒绝处理任务时的策略。
在一实施例中,当handler取值为ThreadPoolExecutor.AbortPolicy时,丢弃任务并抛出Rejected Execution Exception异常;
在一实施例中,当handler取值为ThreadPoolExecutor.DiscardPolicy时,丢弃任务,但不需抛出Rejected Execution Exception异常;
在一实施例中,当handler取值为ThreadPoolExecutor.DiscardOldestPolicy时,丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程);
在一实施例中,当handler取值为ThreadPoolExecutor.CallerRunsPolicy时,由调用线程处理该任务。
所述线程池队列创建模块204,用于根据所述线程池名称与所述线程池对象创建线程池队列。
具体地,将所述线程池名称与对应的所述线程池对象的映射关系保存下来,作为所述线程池队列。
在一实施例中,所述线程池名称与对应的所述线程池对象的映射关系可以表示为Map<ThreadPoolName,ThreadPool>,其中Map类的key为所述线程池名称,value为所述线程池对象。
在进一步的实施例中,可以通过map.put(ThreadPoolName2,ThreadPool2)向所述线程池队列添加第二线程池名称与对应的第二线程池对象的映射关系。
参阅图3所示,是本发明统一线程池处理系统200第二实施例的程序模块图。本实施例中,所述的统一线程池处理系统200除了包括第一实施例中的查询模块201、获取模块202、线程池对象创建模块203、线程池队列创建模块204之外,还包括管理模块205。
所述管理模块205用于通过所述线程池队列管理所述每一个线程池。
具体地,可以通过Object get=map.get("ThreadPoolName")获取与所述线程池名称对应的线程池对象,管理所述与所述线程池名称对应的线程池对象。
在一优选实施例中所述管理模块205具体用于:
获取欲操作的线程池的第一线程池名称;
根据所述第一线程池名称从所述线程池队列中获取对应的第一线程池对象;
对所述第一线程池对象进行管理操作,所述管理操作可以包括:获取所述第一线程池对象线程数、提交任务至所述第一线程池对象及关闭所述第一线程池对象。
在一实施例中,可以通过所述线程池名称获取与所述线程池名称对应的线程池对象当前活动的线程数
具体的,可以通过private volatile int poolSize获取与所述线程池名称对应的线程池对象当前活动的线程数。
在一实施例中,可以通过所述线程池名称获取与所述线程池名称对应的线程池对象的当前执行队列的长度。
在一实施例中,可以通过线程池名称,参数信息及待启动的任务对象,将所述待启动的任务对象提交给指定的线程池对象。
具体的,可以通过execute()与submit()向所述指定的线程池对象提交所述待启动的任务对象。
在进一步的实施例中,所述线程池对象在接收到所述待启动的任务对象后:
当所线程池对象当前活动的线程数小于核心线程数,创建线程运行这个任务;
当所述线程池对象当前活动的线程数大于或等于核心线程数,将这个任务放入队列;
当所述线程池对象当前活动的线程数小于最大线程数,创建新的线程运行这个任务;
当所述线程池对象当前活动的线程数大于或等于最大线程数,线程池会抛出异常。
在一实施例中,可以通过所述线程池名称关闭与所述线程池名称对应的线程池对象。具体的,可以采用shutdown()与shutdownNow()关闭与所述线程池名称对应的线程池对象。其中shutdown()不会立即终止线程池,而是要等所有任务缓存队列中的任务都执行完后才终止,但再也不会接受新的任务;shutdownNow():立即终止线程池,并尝试打断正在执行的任务,并且清空任务缓存队列,返回尚未执行的任务。
本发明统一线程池处理系统通过查询持久化数据表获取每一个线程池的参数,并根据所述每一个线程池的参数分别创建每一个线程池对象,实现了对线程池的统一创建;通过创建线程池队列保存每一个线程池名称与每一个所述线程池对象的映射关系,并根据所述线程池队列实现了对每一个所述线程池对象的统一管理,降低了系统资源消耗,提僧了系统的稳定性。
此外,本发明还提出一种统一线程池处理方法。
参阅图4所示,是本发明统一线程池处理方法第一实施例的流程示意图。在本实施例中,根据不同的需求,图5所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。
步骤S402,查询持久化数据表。
具体地,需要从key-value数据库中读取所述持久化数据表,在一实施例中,所述key-value数据库可以为Redis数据库。
所述持久化数据表用于存储执行队列中每一个线程池对象的参数信息,所述参数信息包括线程池名称、核心线程数、最大线程数、最大队列长度、队列类型。
在本实施例中,所述持久化方法为根据一定的保存规则定期对Redis在内存中的数据做一个快照,把快照数据同步到硬盘上,每次的快照文件就是一个保存着redis数据的二进制文件。
步骤S404,根据所述持久化数据表,获取执行队列中每一个线程池的参数,所述每一个线程池的参数包括每一个线程池名称。
具体地,所述每一个线程池的参数包括线程池名称、核心线程数、最大线程数、最大队列长度、队列类型。
其中所述核心线程数(corePoolSize)中的核心线程会一直存活,即使没有任务需要执行。当正在运行的线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。
在一实施例中,当需要添加一个任务至第一线程池时,若第一线程池中正在运行的线程数量小于核心线程数,那么第一线程池马上创建线程运行这个任务;若第一线程池中正在运行的线程数量大于或等于核心线程数,那么将这个任务放入第一线程池的任务队列中。
其中所述核心线程数(corePoolSize)中的核心线程会一直存活,及时没有任务需要执行当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。
所述最大线程数(maximumPoolSize)用于表示在线程池中最多能创建多少个线程:
在一实施例中,当需要添加一个任务至第一线程池时,若第一线程池的任务队列已满(即已达到最大队列长度),而且正在运行的线程数量小于最大线程数,那么还是要创建新的线程运行这个任务;
在进一步的实施例中,当需要添加一个任务至第一线程池时,如果队列已满(即已达到最大队列长度),而且正在运行的线程数量大于或等于最大线程数,第一线程池将抛出异常。
所述队列类型包括:直接提交队列,无界队列及有界队列。
其中,所述直接提交队列可以为SynchronousQueue。在一实施例中,可以设置SynchronousQueue为工作队列的默认选项,所述直接提交队列直接提交给线程而不需要排队。若不存在可用于立即运行任务的线程,所述直接提交队列把任务加入队列失败,因此会构造一个新的线程。此策略可以避免在处理可能具有内部依赖性的请求集时出现锁。所述直接提交队列通常要求无界最大线程数以避免拒绝新提交的任务。当命令以超过队列所能处理的平均数连续到达时,此策略允许无界线程具有增长的可能性。
所述有界队列可以为ArrayBlockingQueue。其中ArrayBlockingQueue为基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序。
所述无界队列可以为LinkedBlockingQueue。LinkedBlockingQueue为基于链表结构的阻塞队列,此队列按FIFO(先进先出)排序元素,吞吐量通常要高于ArrayBlockingQueue。
步骤S406,根据所述每一个线程池的参数分别创建每一个线程池对象
具体地,通过java.uitl.concurrent.ThreadPoolExecutor类创建线程池,具体创建方法为:
其中,corePoolSize表示核心池大小。在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法。默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到核心线程数后,就会把到达的任务放到缓存队列当中;
其中,maximumPoolSize表示线程池最大线程数,表示在线程池中最多能创建多少个线程;
其中,keepAliveTime表示线程没有任务执行时最多保持多久时间会终止;其中unit为参数keepAliveTime的时间单位;其中,threadFactory为线程工厂,用于创建线程;其中,handler为当拒绝处理任务时的策略。
在一实施例中,当handler取值为ThreadPoolExecutor.AbortPolicy时,丢弃任务并抛出Rejected Execution Exception异常;
在一实施例中,当handler取值为ThreadPoolExecutor.DiscardPolicy时,丢弃任务,但不需抛出Rejected Execution Exception异常;
在一实施例中,当handler取值为ThreadPoolExecutor.DiscardOldestPolicy时,丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程);
在一实施例中,当handler取值为ThreadPoolExecutor.CallerRunsPolicy时,由调用线程处理该任务。
步骤S408,根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列。
具体地,将所述线程池名称与对应的所述线程池对象的映射关系保存下来,作为所述线程池队列。
在一实施例中,所述线程池名称与对应的所述线程池对象的映射关系可以表示为Map<ThreadPoolName,ThreadPool>,其中Map类的key为所述线程池名称,value为所述线程池对象。
在进一步的实施例中,可以通过map.put(ThreadPoolName2,ThreadPool2)向所述线程池队列添加第二线程池名称与对应的第二线程池对象的映射关系。
如图5所示,是本发明统一线程池处理方法的第二实施例的流程示意图。本实施例中,所述统一线程池处理方法的步骤S502-S508与第一实施例的步骤S402-S408相类似,区别在于该方法还包括步骤S510。
该方法包括以下步骤:
步骤S510,通过所述线程池队列管理所述每一个线程池。
具体地,可以通过Object get=map.get("ThreadPoolName")获取与所述线程池名称对应的线程池对象,管理所述与所述线程池名称对应的线程池对象。具体步骤将在本发明统一线程池处理方法的第三实施例(参阅图6)进行详述。
如图6所示,是本发明统一线程池处理方法的第三实施例的流程示意图。本实施例中,所述通过所述线程池队列管理所述每一个线程池的步骤,具体包括:
步骤602,获取欲操作的线程池的第一线程池名称。
具体的,在接收操作指令之后,根据所述操作指令提取所述欲操作的线程池的第一线程池名称。
步骤604,根据所述第一线程池名称从所述线程池队列中获取对应的第一线程池对象。
具体的,将获取的所述第一线程池名称作为变量ThreadPoolName,并传递至所述线程池队列中。
在一实施例中,通过Object get=map.get("ThreadPoolName")获取与所述线程池名称对应的线程池对象。
步骤606,对所述第一线程池对象进行管理操作。
具体的,所述管理操作可以包括:获取所述第一线程池对象线程数、提交任务至所述第一线程池对象及关闭所述第一线程池对象。
在一实施例中,可以通过所述线程池名称获取与所述线程池名称对应的线程池对象当前活动的线程数
具体的,可以通过private volatile int poolSize获取与所述线程池名称对应的线程池对象当前活动的线程数。
在一实施例中,可以通过所述线程池名称获取与所述线程池名称对应的线程池对象的当前执行队列的长度。
在一实施例中,可以通过线程池名称,参数信息及待启动的任务对象,将所述待启动的任务对象提交给指定的线程池对象。
具体的,可以通过execute()与submit()向所述指定的线程池对象提交所述待启动的任务对象。
在进一步的实施例中,所述线程池对象在接收到所述待启动的任务对象后:
当所线程池对象当前活动的线程数小于核心线程数,创建线程运行这个任务;
当所述线程池对象当前活动的线程数大于或等于核心线程数,将这个任务放入队列;
当所述线程池对象当前活动的线程数小于最大线程数,创建新的线程运行这个任务;
当所述线程池对象当前活动的线程数大于或等于最大线程数,线程池会抛出异常。
在一实施例中,可以通过所述线程池名称关闭与所述线程池名称对应的线程池对象。具体的,可以采用shutdown()与shutdownNow()关闭与所述线程池名称对应的线程池对象。其中shutdown()不会立即终止线程池,而是要等所有任务缓存队列中的任务都执行完后才终止,但再也不会接受新的任务;shutdownNow():立即终止线程池,并尝试打断正在执行的任务,并且清空任务缓存队列,返回尚未执行的任务。
本发明统一线程池处理方法通过查询持久化数据表获取每一个线程池的参数,并根据所述每一个线程池的参数分别创建每一个线程池对象,实现了对线程池的统一创建;通过创建线程池队列保存每一个线程池名称与每一个所述线程池对象的映射关系,并根据所述线程池队列实现了对每一个所述线程池对象的统一管理,降低了系统资源消耗,提僧了系统的稳定性。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (6)
1.一种统一线程池处理方法,应用于应用服务器,其特征在于,所述方法包括步骤:
查询持久化数据表;
根据所述持久化数据表,获取执行队列中每一个线程池的参数,所述每一个线程池的参数包括每一个线程池名称;所述每一个线程池的参数还包括核心线程数,最大线程数,最大队列长度,队列类型;
根据所述每一个线程池的参数分别创建每一个线程池对象;
根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列;及
通过所述线程池队列管理所述每一个线程池;
所述通过所述线程池队列管理所述每一个线程池的步骤具体包括:
获取欲操作的线程池的第一线程池名称;
根据所述第一线程池名称从所述线程池队列中获取对应的第一线程池对象;
对所述第一线程池对象进行管理操作,所述管理操作可以包括:获取所述第一线程池对象线程数、提交任务至所述第一线程池对象及关闭所述第一线程池对象。
2.如权利要求1所述的统一线程池处理方法,其特征在于,所述根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列的步骤具体包括:
获取所述每一个线程池名称与所述每一个线程池对象的映射关系;
以Map类保存所述每一个线程池名称与所述每一个线程池对象的映射关系并创建所述线程池队列。
3.如权利要求1所述的统一线程池处理方法,其特征在于,所述根据所述每一个线程池的参数分别创建每一个线程池对象的步骤具体包括:
收集所述每一个线程池的参数;
通过java.uitl.concurrent.ThreadPoolExecutor类创建线程池。
4.一种应用服务器,其特征在于,所述应用服务器包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的统一线程池处理系统,所述统一线程池处理系统被所述处理器执行时实现如下步骤:
查询持久化数据表;
根据所述持久化数据表,获取执行队列中每一个线程池的参数,所述每一个线程池的参数包括每一个线程池名称;所述每一个线程池的参数还包括核心线程数,最大线程数,最大队列长度,队列类型;
根据所述每一个线程池的参数分别创建每一个线程池对象;
根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列;及
通过所述线程池队列管理所述每一个线程池;
所述通过所述线程池队列管理所述每一个线程池的步骤具体包括:
获取欲操作的线程池的第一线程池名称;
根据所述第一线程池名称从所述线程池队列中获取对应的第一线程池对象;
对所述第一线程池对象进行管理操作,所述管理操作可以包括:获取所述第一线程池对象线程数、提交任务至所述第一线程池对象及关闭所述第一线程池对象。
5.如权利要求4所述的应用服务器,其特征在于,所述根据所述每一个线程池名称与所述每一个线程池对象创建线程池队列的步骤具体包括:
获取所述每一个线程池名称与所述每一个线程池对象的映射关系;
以Map类保存所述每一个线程池名称与所述每一个线程池对象的映射关系并创建所述线程池队列。
6.一种计算机可读存储介质,所述计算机可读存储介质存储有统一线程池处理系统,所述统一线程池处理系统可被至少一个处理器执行,以使所述至少一个处理器执行如权利要求1-3中任一项所述的统一线程池处理方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810102252.3A CN108345499B (zh) | 2018-02-01 | 2018-02-01 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
PCT/CN2018/090909 WO2019148734A1 (zh) | 2018-02-01 | 2018-06-12 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810102252.3A CN108345499B (zh) | 2018-02-01 | 2018-02-01 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108345499A CN108345499A (zh) | 2018-07-31 |
CN108345499B true CN108345499B (zh) | 2019-05-17 |
Family
ID=62958407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810102252.3A Active CN108345499B (zh) | 2018-02-01 | 2018-02-01 | 统一线程池处理方法、应用服务器及计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108345499B (zh) |
WO (1) | WO2019148734A1 (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110865798B (zh) * | 2018-08-28 | 2023-07-21 | 中国移动通信集团浙江有限公司 | 一种线程池优化方法及系统 |
CN109582472B (zh) * | 2018-10-19 | 2021-05-18 | 华为技术有限公司 | 一种微服务处理方法及设备 |
CN109739583B (zh) * | 2018-12-13 | 2023-09-08 | 平安科技(深圳)有限公司 | 多线程并行运行的方法、装置、计算机设备以及存储介质 |
CN110109739A (zh) * | 2019-04-25 | 2019-08-09 | 北京奇艺世纪科技有限公司 | 一种多线程应用程序的关闭方法及装置 |
CN112114862B (zh) * | 2019-06-20 | 2023-12-22 | 普天信息技术有限公司 | spring boot实例并发处理方法及装置 |
CN110287013A (zh) * | 2019-06-26 | 2019-09-27 | 四川长虹电器股份有限公司 | 基于java多线程技术解决物联云端服务雪崩效应的方法 |
CN111078377B (zh) * | 2019-11-29 | 2023-04-07 | 易方信息科技股份有限公司 | 一种线程工作方法 |
CN111625332A (zh) * | 2020-05-21 | 2020-09-04 | 杭州安恒信息技术股份有限公司 | Java线程池拒绝策略执行方法、装置和计算机设备 |
CN111897643B (zh) * | 2020-08-05 | 2024-07-02 | 深圳鼎盛电脑科技有限公司 | 线程池配置系统、方法、装置和存储介质 |
CN112667385A (zh) * | 2021-01-15 | 2021-04-16 | 北京金和网络股份有限公司 | 一种云服务系统及其任务执行方法和装置及服务器 |
CN112965805B (zh) * | 2021-03-25 | 2023-12-05 | 兴业数字金融服务(上海)股份有限公司 | 基于内存映射文件的跨进程异步任务处理方法及系统 |
CN112835704A (zh) * | 2021-03-26 | 2021-05-25 | 中国工商银行股份有限公司 | 任务处理方法、线程池管理方法、装置和计算设备 |
CN114490112B (zh) * | 2021-12-20 | 2024-09-20 | 阿里巴巴(中国)有限公司 | 消息处理方法、设备及系统 |
CN114924849B (zh) * | 2022-04-27 | 2024-06-04 | 上海交通大学 | 一种工业控制系统高并发执行和资源调度方法及装置 |
CN116974730B (zh) * | 2023-09-22 | 2024-01-30 | 深圳联友科技有限公司 | 一种大批量任务处理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010148884A1 (zh) * | 2009-12-31 | 2010-12-29 | 中兴通讯股份有限公司 | 移动终端系统线程处理方法及装置 |
CN103455377A (zh) * | 2013-08-06 | 2013-12-18 | 北京京东尚科信息技术有限公司 | 用于管理业务线程池的系统和方法 |
CN105159768A (zh) * | 2015-09-09 | 2015-12-16 | 浪潮集团有限公司 | 一种任务管理方法及云数据中心管理平台 |
CN107450978A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 分布式系统的线程管理方法和装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6604125B1 (en) * | 1999-09-24 | 2003-08-05 | Sun Microsystems, Inc. | Mechanism for enabling a thread unaware or non thread safe application to be executed safely in a multi-threaded environment |
US20070229520A1 (en) * | 2006-03-31 | 2007-10-04 | Microsoft Corporation | Buffered Paint Systems |
CN101599027B (zh) * | 2009-06-30 | 2013-02-13 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
US9397976B2 (en) * | 2009-10-30 | 2016-07-19 | International Business Machines Corporation | Tuning LDAP server and directory database |
US8694961B2 (en) * | 2012-04-03 | 2014-04-08 | Microsoft Corporation | Thread-agile execution of dynamic programming language programs |
CN103218264A (zh) * | 2013-03-26 | 2013-07-24 | 广东威创视讯科技股份有限公司 | 基于线程池的多线程有限状态机切换方法及装置 |
CN105760234A (zh) * | 2016-03-17 | 2016-07-13 | 联动优势科技有限公司 | 一种线程池管理方法及装置 |
CN107463439A (zh) * | 2017-08-21 | 2017-12-12 | 山东浪潮通软信息科技有限公司 | 一种线程池实现方法及装置 |
-
2018
- 2018-02-01 CN CN201810102252.3A patent/CN108345499B/zh active Active
- 2018-06-12 WO PCT/CN2018/090909 patent/WO2019148734A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010148884A1 (zh) * | 2009-12-31 | 2010-12-29 | 中兴通讯股份有限公司 | 移动终端系统线程处理方法及装置 |
CN103455377A (zh) * | 2013-08-06 | 2013-12-18 | 北京京东尚科信息技术有限公司 | 用于管理业务线程池的系统和方法 |
CN105159768A (zh) * | 2015-09-09 | 2015-12-16 | 浪潮集团有限公司 | 一种任务管理方法及云数据中心管理平台 |
CN107450978A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 分布式系统的线程管理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108345499A (zh) | 2018-07-31 |
WO2019148734A1 (zh) | 2019-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108345499B (zh) | 统一线程池处理方法、应用服务器及计算机可读存储介质 | |
CN108848039B (zh) | 服务器、消息分配的方法及存储介质 | |
US9342376B2 (en) | Method, system, and device for dynamic energy efficient job scheduling in a cloud computing environment | |
CN113641457B (zh) | 容器创建方法、装置、设备、介质及程序产品 | |
CN111324427B (zh) | 一种基于dsp的任务调度方法及装置 | |
US9875192B1 (en) | File system service for virtualized graphics processing units | |
US9973512B2 (en) | Determining variable wait time in an asynchronous call-back system based on calculated average sub-queue wait time | |
US20110138400A1 (en) | Automated merger of logically associated messages in a message queue | |
CN105045607A (zh) | 一种实现多种大数据计算框架统一接口的方法 | |
CN112685148B (zh) | 海量终端的异步通信方法、装置、计算机设备和存储介质 | |
CN109842621A (zh) | 一种减少token存储数量的方法及终端 | |
US10558716B2 (en) | Adaptive content-based publish/subscribe messaging | |
CN112860387A (zh) | 分布式任务调度方法、装置、计算机设备及存储介质 | |
CN112600761A (zh) | 一种资源分配的方法、装置及存储介质 | |
CN115460216A (zh) | 算力资源调度方法和装置、算力资源调度设备、系统 | |
CN109918277A (zh) | 电子装置、系统日志聚类分析结果的评价方法及存储介质 | |
CN104679575A (zh) | 输入输出流的控制系统及其方法 | |
CN106997304B (zh) | 输入输出事件的处理方法及设备 | |
CN112217849B (zh) | Sd-wan系统中的任务调度方法、系统和计算机设备 | |
CN112148506A (zh) | 消息处理方法、装置、平台和存储介质 | |
CN108718285B (zh) | 云计算集群的流量控制方法、装置及服务器 | |
CN110825342B (zh) | 存储调度器件和用于处理信息的系统、方法及装置 | |
CN116541167A (zh) | 系统流量控制方法、装置、电子设备及计算机可读介质 | |
CN114116908A (zh) | 一种数据管理方法、装置及电子设备 | |
CN111290850B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |