Java线程池的任务处理方法、装置、设备和介质转让专利

申请号 : CN202110455550.2

文献号 : CN113220429B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 朱文魁

申请人 : 武汉联影医疗科技有限公司

摘要 :

本申请涉及一种Java线程池的任务处理方法、装置、计算机设备和存储介质。所述方法包括:在接收到目标任务的情况下,判断线程池是否满负荷;目标任务为预设的任务集中的任务;若线程池满负荷,根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和任务集对应的最小任务耗时,确定执行目标任务所需的等待时间;其中,最小任务耗时为任务集对应的各任务的任务耗时中的最小值;在等待时间到达时,控制主线程添加目标任务到线程池中。采用本方法能够避免因主线程执行任务阻塞时间过长,线程池线程处于空闲状态而造成的资源浪费。

权利要求 :

1.一种Java线程池的任务处理方法,其特征在于,所述方法包括:在接收到目标任务的情况下,判断线程池是否满负荷;所述目标任务为预设的任务集中的任务;

若所述线程池满负荷,根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述任务集对应的最小任务耗时,确定出第一目标时间,根据所述第一目标时间和所述最小任务耗时,确定执行所述目标任务所需的等待时间;其中,所述最小任务耗时为所述任务集对应的各任务的任务耗时中的最小值;所述第一目标时间为执行完所述线程池对应的缓冲队列所需的时间;

在所述等待时间到达时,控制主线程添加所述目标任务到线程池中。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:若所述线程池未满负荷,则控制所述主线程将所述目标任务添加到所述线程池中。

3.根据权利要求2所述的方法,其特征在于,所述目标任务所需的等待时间与第二目标时间线性相关;其中,所述第二目标时间为所述第一目标时间与所述最小任务耗时之和。

4.根据权利要求2所述的方法,其特征在于,所述第一目标时间与所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数、所述最小任务耗时均线性相关。

5.根据权利要求1所述的方法,其特征在于,所述判断线程池是否满负荷,包括:若所述线程池中当前执行任务的线程数达到所述目标线程数,且所述线程池的缓冲队列数达到所述目标值,则确定所述线程池满负荷。

6.根据权利要求1所述的方法,其特征在于,所述线程池对应的缓冲队列数的目标值为根据所述线程池对应的预设缓冲队列数与预设阈值所确定的。

7.根据权利要求6所述的方法,其特征在于,所述预设阈值与所述线程池对应的预设缓冲队列数线性相关。

8.一种Java线程池的任务处理装置,其特征在于,所述装置包括:判断模块,用于在接收到目标任务的情况下,判断线程池是否满负荷;所述目标任务为预设的任务集中的任务;

确定模块,用于若所述线程池满负荷,根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述任务集对应的最小任务耗时,确定出第一目标时间,根据所述第一目标时间和所述最小任务耗时,确定执行所述目标任务所需的等待时间;其中,所述最小任务耗时为所述任务集对应的各任务的任务耗时中的最小值;所述第一目标时间为执行完所述线程池对应的缓冲队列所需的时间;

控制模块,用于在所述等待时间到达时,控制主线程添加所述目标任务到线程池中。

9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。

说明书 :

Java线程池的任务处理方法、装置、设备和介质

技术领域

[0001] 本申请涉及数据处理技术领域,特别是涉及一种Java线程池的任务处理方法、装置、计算机设备和存储介质。

背景技术

[0002] 在Java中创建和销毁线程会消耗大量的时间和资源,因此,在处理多任务的情况下会选择使用线程池技术,将创建的线程缓存下来,有新的任务到来时候直接执行而无需
再新创建线程。通常,当新的任务添加至线程池时,若线程池中无空闲工作线程且缓冲队列
已满的情况下,将判断线程池中的线程数是否达到最大线程数,如果没有达到最大线程数,
则新启动线程来执行任务,如果已经达到最大线程数,则通过相应的拒绝策略来处理这些
任务。
[0003] 传统技术中,常用的拒绝策略为调用者运行策略,在使用这种拒绝策略的情况下,当线程池达到最大线程数且缓冲队列已满的情况下,则由主线程来执行任务,这样再有新
任务来的时候,即使其他线程已经空闲了,但是由于主线程正在执行任务,处于忙碌状态,
无法分配新任务到当前线程池。
[0004] 因此,传统的Java线程池拒绝策略的执行方法,存在资源浪费的问题。

发明内容

[0005] 基于此,有必要针对上述技术问题,提供一种能够降低Java线程池拒绝策略执行中资源浪费的Java线程池的任务处理方法、装置、计算机设备和存储介质。
[0006] 一种Java线程池的任务处理方法,所述方法包括:
[0007] 在接收到目标任务的情况下,判断线程池是否满负荷;所述目标任务为预设的任务集中的任务;
[0008] 若所述线程池满负荷,根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述任务集对应的最小任务耗时,确定执行所述目标任务所需的等待
时间;其中,所述最小任务耗时为所述任务集对应的各任务的任务耗时中的最小值;
[0009] 在所述等待时间到达时,控制主线程添加所述目标任务到线程池中。
[0010] 在其中一个实施例中,所述根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述任务集对应的最小任务耗时,确定执行所述目标任务所需的
等待时间,包括:
[0011] 根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述最小任务耗时,确定出第一目标时间;所述第一目标时间为执行完所述线程池对应的缓
冲队列所需的时间;
[0012] 根据第一目标时间和所述最小任务耗时,确定执行所述目标任务所需的等待时间。
[0013] 在其中一个实施例中,所述目标任务所需的等待时间与第二目标时间线性相关;其中,所述第二目标时间为所述第一目标时间与所述最小任务耗时之和。
[0014] 在其中一个实施例中,所述第一目标时间与所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数、所述最小任务耗时均线性相关。
[0015] 在其中一个实施例中,所述判断线程池是否满负荷,包括:
[0016] 若所述线程池中当前执行任务的线程数达到所述目标线程数,且所述线程池的缓冲队列数达到所述目标值,则确定所述线程池满负荷。
[0017] 在其中一个实施例中,所述线程池对应的缓冲队列数的目标值为根据所述线程池对应的预设缓冲队列数与预设阈值所确定的。
[0018] 在其中一个实施例中,所述预设阈值与所述线程池对应的预设缓冲队列数线性相关。
[0019] 一种Java线程池的任务处理装置,所述装置包括:
[0020] 判断模块,用于在接收到目标任务的情况下,判断线程池是否满负荷;所述目标任务为预设的任务集中的任务;
[0021] 确定模块,用于若所述线程池满负荷,根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述任务集对应的最小任务耗时,确定执行所述目标
任务所需的等待时间;其中,所述最小任务耗时为根据所述任务集对应的各任务的任务耗
时所确定的;
[0022] 控制模块,用于在所述等待时间到达时,控制主线程添加所述目标任务到线程池中。
[0023] 一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0024] 在接收到目标任务的情况下,判断线程池是否满负荷;所述目标任务为预设的任务集中的任务;
[0025] 若所述线程池满负荷,根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述任务集对应的最小任务耗时,确定执行所述目标任务所需的等待
时间;其中,所述最小任务耗时为所述任务集对应的各任务的任务耗时中的最小值;
[0026] 在所述等待时间到达时,控制主线程添加所述目标任务到线程池中。
[0027] 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
[0028] 在接收到目标任务的情况下,判断线程池是否满负荷;所述目标任务为预设的任务集中的任务;
[0029] 若所述线程池满负荷,根据所述线程池对应的缓冲队列数的目标值、所述线程池对应的目标线程数和所述任务集对应的最小任务耗时,确定执行所述目标任务所需的等待
时间;其中,所述最小任务耗时为所述任务集对应的各任务的任务耗时中的最小值;
[0030] 在所述等待时间到达时,控制主线程添加所述目标任务到线程池中。
[0031] 上述Java线程池的任务处理方法、装置、计算机设备和存储介质,在接收到预设的任务集中的目标任务的情况下,通过对线程池是否满负荷进行判断,如果线程池满负荷,则
根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和上述任务集对应的最
小任务耗时,确定执行该目标任务所需的等待时间,在该等待时间到达时,控制主线程添加
目标任务到线程池中,通过控制主线程将目标任务添加到线程池中避免了因主线程执行任
务阻塞时间过长,线程池线程处于空闲状态而造成的资源浪费;另外,通过确定执行目标任
务所需的等待时间,既能保证主线程只负责分配任务而不是去执行任务,又能充分利用线
程池资源保证线程池吞吐量。

附图说明

[0032] 图1为一个实施例中计算机设备的示意图;
[0033] 图2为一个实施例中Java线程池的任务处理方法的流程示意图;
[0034] 图3为另一个实施例中Java线程池的任务处理方法的流程示意图;
[0035] 图4为一个实施例中Java线程池的任务处理装置的结构框图。

具体实施方式

[0036] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不
用于限定本申请。
[0037] Java中创建和销毁线程会消耗大量的时间和资源,所以在多任务处理时会选择使用线程池技术,将创建的线程缓存下来,有新任务到来时调用该线程直接执行新任务,而无
需再新创建线程。通常,一个新任务添加至线程池时,若线程池中有空闲的工作线程,则由
该工作线程来运行该任务;在无空闲的工作线程的情况下,任务将被保存至缓冲队列,等待
工作线程当前任务运行完毕;在无空闲工作线程且缓冲队列已满的情况下,判断线程池中
的线程数是否达到最大线程数,如果没有达到最大线程数则新启动线程来执行任务,如果
已经达到最大线程数则通过相应的拒绝策略来处理这些任务,目前常见的拒绝策略中的调
用者运行策略当线程池达到最大线程数且缓冲队列已满的情况下,则由主线程来执行任
务,这样再有新任务来的时候即使其他线程已经空闲了,但是由于主线程正在执行任务处
于忙碌状态,无法分配新任务到当前线程池,导致资源的浪费影响任务处理的吞吐量。为
此,本申请针对拒绝策略中的调用者运行策略存在资源浪费的问题,提出了一种Java线程
池的任务处理方法、装置、计算机设备和存储介质。
[0038] 本申请实施例提供的Java线程池的任务处理方法,可以适用于如图1所示的计算机设备。该计算机设备包括通过系统总线连接的处理器、存储器,该存储器中存储有计算机
程序,处理器执行该计算机程序时可以执行下述方法实施例的步骤。可选的,该计算机设备
还可以包括网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控
制能力。该计算机设备的存储器包括非易失性存储介质、内存储器,该非易失性存储介质存
储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序
的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。可选的,
该计算机设备可以是服务器,可以是个人计算机,还可以是个人数字助理,还可以是其他的
终端设备,例如平板电脑、手机等等,还可以是云端或者远程服务器,本申请实施例对计算
机设备的具体形式并不做限定。
[0039] 在一个实施例中,如图2所示,提供了一种Java线程池的任务处理方法,以该方法应用于图1中的计算机设备为例进行说明,包括以下步骤:
[0040] S201,在接收到目标任务的情况下,判断线程池是否满负荷;目标任务为预设的任务集中的任务。
[0041] 其中,预设的任务集中包括多个任务,在执行这多个任务时通过线程池为这多个任务分配线程从而实现任务的执行。具体地,在接收到预设的任务集中的目标任务的情况
下,计算机设备判断Java线程池是否满负荷,根据Java线程池是否满负荷为目标任务分配
线程,从而执行该目标任务。示例性地,以预设的任务集中包括30个任务为例,该目标任务
可以为该任务集中的第25个任务,也可以为该任务集中的第12个任务,本实施例在此不做
限制。需要说明的是,本实施例中的线程池满负荷是指该线程池中当前执行任务的线程数
达到了最大线程数并且该线程池的缓冲队列已满的情况。
[0042] S204,若线程池满负荷,根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和任务集对应的最小任务耗时,确定执行目标任务所需的等待时间;其中,最小任
务耗时为任务集对应的各任务的任务耗时中的最小值。
[0043] 具体地,若计算机设备判断得到此时的线程池为满负荷状态,则计算机设备根据该线程池对应的缓冲队列数的目标值、该线程池对应的目标线程数和上述任务集对应的最
小任务耗时,确定执行该目标任务所需的等待时间,其中,上述任务集对应的最小任务耗时
为该任务集中各任务的任务耗时中的最小值,例如,该任务集中有15个任务,则计算机设备
将这15个任务中耗时最小的时间值确定为该任务集对应的最小任务耗时。可选的,本实施
例中线程池对应的缓冲队列数的目标值可以为该线程池对应的缓冲队列数的最大值,线程
池对应的目标线程数可以为该线程池对应的最大线程数。可选的,若计算机设备判断得到
该线程池未满负荷,则计算机设备可以控制主线程将该目标任务添加到线程池中。
[0044] S203,在等待时间到达时,控制主线程添加目标任务到线程池中。
[0045] 具体地,计算机设备在上述确定的目标任务所需的等待时间到达时,控制主线程添加该目标任务到线程池中。可选的,上述主线程只是用于控制线程池中的线程并且独立
于该线程池的线程。需要说明的是,上述等待时间是线程池消费完现有任务的最小时间,所
以在上述等待时间到达的这段时间内,线程池仍处于满负荷状态,仍在执行任务。
[0046] 上述Java线程池的任务处理方法中,计算机设备在接收到预设的任务集中的目标任务的情况下,通过对线程池是否满负荷进行判断,如果线程池满负荷,则根据线程池对应
的缓冲队列数的目标值、线程池对应的目标线程数和上述任务集对应的最小任务耗时,确
定执行该目标任务所需的等待时间,在该等待时间到达时,控制主线程添加目标任务到线
程池中,通过控制主线程将目标任务添加到线程池中避免了因主线程执行任务阻塞时间过
长,线程池线程处于空闲状态而造成的资源浪费;另外,通过确定执行目标任务所需的等待
时间,既能保证主线程只负责分配任务而不是去执行任务,又能充分利用线程池资源保证
线程池吞吐量。
[0047] 在上述根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和预设的任务集对应的最小任务耗时,确定执行目标任务所需的等待时间的场景中,在一个实施
例中,如图3所示,上述S202,包括:
[0048] S301,根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和最小任务耗时,确定出第一目标时间;第一目标时间为执行完线程池对应的缓冲队列所需的时
间。
[0049] 具体地,计算机设备根据上述线程池对应的缓冲队列数的目标值、上述线程池对应的目标线程数和上述任务集对应的最小任务耗时,确定出执行完线程池对应的缓冲队列
所需的第一目标时间。可选的,上述第一目标时间与上述线程池对应的缓冲队列数的目标
值、线程池对应的目标线程数和上述任务集对应的最小任务耗时均线性相关。示例性地,计
算机设备可以根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和上述最
小任务耗时以及公式 确定出执行完线程池对应的缓冲队列
所需的时间,式中,t表示第一目标时间,maxQueue表示线程池对应的缓冲队列数的目标值,
maxPoolsize表示线程池对应的目标线程数,minTasktime为上述最小任务耗时。可选的,计
算机设备也可以将线程池对应的缓冲队列数的目标值和预设的比例因子相乘从而确定出
第一目标时间,即可根据公式 确定出第一目标时间,
式中,factor表示预设的比例因子。
[0050] S302,根据第一目标时间和最小任务耗时,确定执行目标任务所需的等待时间。
[0051] 具体地,计算机设备根据上述确定出的第一目标时间和上述最小任务耗时,确定执行上述目标任务所需的等待时间。可选的,计算机设备可以将上述第一目标时间和上述
最小任务耗时之和确定为执行上述目标任务所需的等待时间。需要说明的是,将上述第一
目标时间和上述最小任务耗时之和确定为执行目标任务所需的等待时间的含义为在执行
完线程池中所有任务都是耗时最小的这种极端情况下,执行完线程池对应的缓冲队列所需
的时间和正在执行的任务所需的时间都为最小耗时,从而保证目标任务在等待的这段时间
内线程池是处于满负荷状态而不会出现空闲的情况。
[0052] 本实施例中,计算机设备根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和预设任务集对应的最小任务耗时,能够确定出执行完线程池对应的缓冲队列
所需的第一目标时间,进而可以根据确定的第一目标时间和任务集对应的最小任务耗时,
确定出执行目标任务所需的等待时间,由于确定的执行完线程池对应的缓冲队列所需的第
一目标时间是根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和任务集
对应的最小任务耗时确定的,而目标任务所需的等待时间是根据该第一目标时间和任务集
对应的最小任务耗时确定的,保证了目标任务在等待的这段时间内线程池是处于满负荷状
态不会出现空闲的情况,避免了线程池线程处于空闲状态而造成的资源浪费。
[0053] 在上述根据第一目标时间和任务集对应的最小任务耗时,确定执行目标任务所需的等待时间的场景中,在一个实施例中,上述目标任务所需的等待时间与第二目标时间线
性相关;其中,第二目标时间为第一目标时间与任务集对应的最小任务耗时之和。
[0054] 具体地,计算机设备可以根据上述确定的第一目标时间和任务集对应的最小任务耗时之和确定出第二目标时间,根据第二目标时间确定出上述目标任务所需的等待时间,
其中,目标任务所需的等待时间与该第二目标时间线性相关。可选的,计算机设备可以将第
二目标时间确定为上述目标任务所需的等待时间,也可以将第二目标时间和参数相乘的乘
积确定为目标任务所需的等待时间。
[0055] 本实施例中,计算机设备将执行完线程池对应的缓冲队列所需的第一目标时间和任务集对应的最小任务耗时之和确定为第二目标时间,进而可以根据目标任务所需的等待
时间与该第二目标时间间的线性相关的关系确定出目标任务所需的等待时间,由于确定的
目标任务所需的等待时间是与执行完线程池对应的缓冲队列所需的第一目标时间和任务
集对应的最小任务耗时之和线性相关的,保证了目标任务在等待的这段时间内线程池是处
于满负荷状态不会出现空闲的情况,避免了线程池线程处于空闲状态而造成的资源浪费。
[0056] 在上述接收到目标任务的情况下,判断线程池是否满负荷的场景中,在一个实施例中,上述S201,包括:若线程池中当前执行任务的线程数达到目标线程数,且线程池的缓
冲队列数达到目标值,则确定线程池满负荷。
[0057] 具体地,线程池满负荷是指线程池中当前执行任务的线程数达到该线程池对应的目标线程数,且该线程池的缓冲队列数达到线程池对应的缓冲队列数的目标值。可选的,作
为一种实现方式,线程池满负荷是指线程池达到最大线程数并且线程池缓冲队列已满,这
里需要说明的是线程池缓冲队列已满并不代表当前缓冲队列大小workQueue.size()达到
最大值maxQueue,而是通过当前缓冲队列大小workQueue.size()是否超过缓冲队列最大
值maxQueue乘以线程池缓冲队列阀值factor来确认缓冲队列已满,即若workQueue.size
()>maxQueue*factor则表示线程池队列已满。可选的,计算机设备可以根据计算公式:
activeCount==maxPoolSize&&workQueue.size()>maxQueue*factor)判断线程池是否
满负荷,式中,activeCount表示线程池正在执行任务的线程数,maxPoolSize表示线程池最
大线程数,workQueue.size()表示当前缓冲队列大小,maxQueue表示线程池缓冲队列
workQueue的最大值,这里需要说明的是,线程池缓冲队列的阀值在多线程环境下队列变化
较快,所以判断缓冲队列是否已满不能直接通过workQueue.size()==maxQueue进行判
断,而应该对maxQueue加一个比例因子,例如,0.95等,比例因子的具体数值可以根据队列
大小进行确定。
[0058] 本实施例中,若线程池中当前执行任务的线程数达到目标线程数,且线程池缓冲队列数达到线程池对应的缓冲队列数的目标值,则计算机设备确定线程池满负荷,该确定
过程十分简单,根据线程池中当前执行任务的线程数和线程池的缓冲队列数就能够进行确
定,从而提高了确定线程池是否满负荷的效率。
[0059] 在一个实施例中,上述线程池对应的缓冲队列数的目标值为根据线程池对应的预设缓冲队列数与阈值所确定的。
[0060] 具体地,线程池缓冲队列的阀值在多线程环境下队列变化较快,因此,计算机设备可以根据线程池对应的预设缓冲队列数与预设阈值对线程池对应的缓冲队列数的目标值
进行确定。可选的,线程池对应的缓冲队列数的目标值可以为该线程池对应的缓冲队列数
的最大值。可选的,上述预设阈值与该线程池对应的预设缓冲队列数线性相关,也就是说,
计算机设备可以根据线程池对应的预设缓冲队列数确定上述阈值,一般地,线程池对应的
预设缓冲队列数越大,则上述阈值越大,线程池对应的预设缓冲队列数越小,则上述阈值越
小。
[0061] 本实施例中,线程池对应的缓冲队列数的目标值是根据线程池对应的预设缓冲队列数与预设阈值所确定的,这样能够确保确定的线程池对应的缓冲队列数的目标值的准确
度。
[0062] 应该理解的是,虽然图2‑3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤
的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2‑3中的至少一
部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行
完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而
是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0063] 在一个实施例中,如图4所示,提供了一种Java线程池的任务处理装置,包括:判断模块、确定模块和控制模块,其中:
[0064] 判断模块,用于在接收到目标任务的情况下,判断线程池是否满负荷;目标任务为预设的任务集中的任务。
[0065] 确定模块,用于若线程池满负荷,根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和任务集对应的最小任务耗时,确定执行目标任务所需的等待时间;其
中,最小任务耗时为根据任务集对应的各任务的任务耗时所确定的。
[0066] 控制模块,用于在等待时间到达时,控制主线程添加目标任务到线程池中。
[0067] 本实施例提供的Java线程池的任务处理装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
[0068] 在上述实施例的基础上,可选的,上述确定模块,包括:第一确定单元和第二确定单元,其中:
[0069] 第一确定单元,用于根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和最小任务耗时,确定出第一目标时间;第一目标时间为执行完线程池对应的缓冲
队列所需的时间。
[0070] 第二确定单元,用于根据第一目标时间和最小任务耗时,确定执行目标任务所需的等待时间。
[0071] 本实施例提供的Java线程池的任务处理装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
[0072] 在上述实施例的基础上,可选的,目标任务所需的等待时间与第二目标时间线性相关;其中,第二目标时间为第一目标时间与最小任务耗时之和。
[0073] 本实施例提供的Java线程池的任务处理装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
[0074] 在上述实施例的基础上,可选的,第一目标时间与线程池对应的缓冲队列数的目标值、线程池对应的目标线程数、最小任务耗时均线性相关。
[0075] 本实施例提供的Java线程池的任务处理装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
[0076] 在上述实施例的基础上,可选的,上述判断模块,包括:判断单元,其中:
[0077] 判断单元,用于若线程池中当前执行任务的线程数达到目标线程数,且线程池的缓冲队列数达到目标值,则确定线程池满负荷。
[0078] 本实施例提供的Java线程池的任务处理装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
[0079] 在上述实施例的基础上,可选的,线程池对应的缓冲队列数的目标值为根据线程池对应的预设缓冲队列数与预设阈值所确定的。
[0080] 本实施例提供的Java线程池的任务处理装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
[0081] 在上述实施例的基础上,可选的,预设阈值与线程池对应的预设缓冲队列数线性相关。
[0082] 本实施例提供的Java线程池的任务处理装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
[0083] 关于Java线程池的任务处理装置的具体限定可以参见上文中对于Java线程池的任务处理方法的限定,在此不再赘述。上述Java线程池的任务处理装置中的各个模块可全
部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算
机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器
调用执行以上各个模块对应的操作。
[0084] 在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
[0085] 在接收到目标任务的情况下,判断线程池是否满负荷;目标任务为预设的任务集中的任务;
[0086] 若线程池满负荷,根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和任务集对应的最小任务耗时,确定执行目标任务所需的等待时间;其中,最小任务耗
时为任务集对应的各任务的任务耗时中的最小值;
[0087] 在等待时间到达时,控制主线程添加目标任务到线程池中。
[0088] 上述实施例提供的计算机设备,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
[0089] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
[0090] 在接收到目标任务的情况下,判断线程池是否满负荷;目标任务为预设的任务集中的任务;
[0091] 若线程池满负荷,根据线程池对应的缓冲队列数的目标值、线程池对应的目标线程数和任务集对应的最小任务耗时,确定执行目标任务所需的等待时间;其中,最小任务耗
时为任务集对应的各任务的任务耗时中的最小值;
[0092] 在等待时间到达时,控制主线程添加目标任务到线程池中。
[0093] 上述实施例提供的计算机可读存储介质,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
[0094] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机
可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,
本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可
包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑
Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器
(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种
形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存
储器(Dynamic Random Access Memory,DRAM)等。
[0095] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛
盾,都应当认为是本说明书记载的范围。
[0096] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来
说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护
范围。因此,本申请专利的保护范围应以所附权利要求为准。