首页 > 编程知识 正文

java线程池参数详解,溶度参数相近原则

时间:2023-05-05 02:57:58 阅读:22186 作者:4543

我应该如何设置线程池的参数? 我认为这对很多人来说这也是一个难题,让我们一起解决应该如何设置线程池的参数。

首先设定参数时,需要考虑以下几点!

1、抗下游系统并发能力强

多线程给下游系统带来的并发操作与设置的线程数相同

示例:

如果要通过多线程访问数据库,则必须考虑设置数据库的连接池大小。 存在数据库并发对qps的影响太大,数据库锁定等问题。

如果是接入下游系统的接口,就要考虑下游系统能否承受这么大的并发量,不能切断下游系统。

2、CPU使用率

如果线程数设置得较大,则会出现以下问题:

)线程初始化、切换、销毁等操作占用相对较多的cpu资源,使cpu利用率保持在相对较高的水平。

)线程数较多时,任务在短时间内迅速执行,任务的集中执行会给cpu带来很大压力。

)对任务的集中支持使cpu利用率呈锯齿状。 也就是说,cpu在短时间内上升,然后迅速下降到空闲状态。

处理器的使用不合理。 必须减少线程数量,使任务排队等待,以确保cpu利用率保持在合理且平均的数字范围内。

因此,在cpu充足的情况下,不能太大。 请注意。 并不是越大越好。

此时,上线后,可以观察机器的cpu使用率和cpu负载,通过观察这两个参数判断线程数是否合理。

可以通过命令确定cpu利用率是否主要用于切换线程。

cpu负载是正在运行的线程和等待运行的线程之和。

请注意。 此处的等待是指线程处于运行状态。 但是,尚未安排在cpu上的等待,繁重的负载意味着cpu竞争激烈。 此外,线程设置较大,表示正在占用cpu资源。

通常,合理的值应该与cpu内核数大致相同。

3、线程池中执行的任务的性质

由于计算密集型任务占用cpu,因此线程数通常设置为与cpu的核心数相同或稍大。

但是,IO型任务的主要时间花在IO等待上,cpu压力不是很大,所以线程数一般设定得比较大。

示例:

通过多线程访问数据库时,数据库中有128个表。 这样,我们将直接考虑使用128个线程。

4、内存使用率

线程数量过多,队列大小会影响此数据。

队列大小必须通过预先计算线程池任务的数量来适当调整队列大小。 不要太小而溢出是不合适的。 因为溢出在走拒绝战略,稍微影响其性能的同时,也增加了复杂性。 因此,这里需要仔细考虑拒绝战略的选择。

拒绝策略包括引导策略、呼叫运行策略和

分散策略也不适合太大。 太大了就不能用了。 另外,会消耗比较大的内存。

我想一定要考虑以上四点。 之后,我会介绍很多人容易犯的错误。

如下所示。

线程池配置

在这里,由于发现任务执行慢,机器的cpu、存储器等也低,所以决定了增大线程。

因为需要约100个线程,所以更改配置。

问题:

关于线程池是否创建新线程,请考虑以下几点:

1、如果线程数小于corePoolSize,则直接添加新线程。

2、如果线程数在corePoolSize以上,则排队等待。 如果排队成功,就不添加新线程。

3、如果对列已满,线程数小于maxPoolSize,则创建新线程。 如果大于maxPoolSize,则到达拒绝策略。

因此,由于队列设置很大,通常不会填满,所以线程数实际上一直达不到maxPoolSize。 所以,其实一致地使用了50个线程。

解决:

将核心线程和最大线程设置为一个值,全部设置为100即可。

以上简要介绍了线程池参数的设置,你知道吗? 更多内容,请继续关注奇q工具网常见问答栏。

请阅读:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。