行业资讯 2025年08月6日
0 收藏 0 点赞 493 浏览 935 个字
摘要 :

文章目录 一、建议 二、原因分析 三、总结 在Java项目开发过程中,我们经常会使用到线程池,但是当面对多个任务场景,我们是给每个场景单独定义一个线程池,还是所有场……




  • 一、建议
  • 二、原因分析
  • 三、总结

在Java项目开发过程中,我们经常会使用线程池,但是当面对多个任务场景,我们是给每个场景单独定义一个线程池,还是所有场景共用一个线程池?想必,很多同学也为此纠结过,那我们应该具体怎么做呢?

一、建议

这里我们建议,如果你的Java项目中有多个场景需要使用线程池,那么最好为每一个业务场景使用独立的线程池,不要让所有的场景共用一个线程池。

二、原因分析

1)独立的线城池之间互相不影响彼此的任务作业,更有利于保证本任务的独立性和完整性,更符合低耦合的设计思想

2)如果所有的场景共用一个线程池,可能会出现如下问题,举例:

比如有任务A、任务B、任务C 这三个任务场景共用一个线程池,配置如下:

threadPool:
  corePoolSize: 10
  maximumPoolSize : 1000
  workQueue : 1000
  keepAliveSeconds: 300

提示:关于这些线程池参数的含义,如果你不了解,请参考Java创建线程池的几种方式具体实现,这里面有关ThreadPoolExecutor线程池类7大参数含义的详解。

假想一种情况,当任务C请求量剧烈增加的时候就会占用线程池中所有的线程,导致任务A和任务B没有线程可用,从而出现迟迟获取不到资源的情况。比如任务C同时有2000个线程请求,此时就可能会导致 任务A和任务B分配不到资源或者分配到很少的线程资源。如果,任务C每个任务运行时间再非常长,那任务A和B基本就会长时间处于等待状态。

所以为了避免这种情况的产生,最好的方式是建立独立的线程池。

这样不管任务C的线程是堵塞还是其他原因,都不会影响任务A和任务B的执行,同理任务A、任务B也一样不会影响其他场景任务的执行,从而保证竞争只在该业务场景内部,而不会影响外部场景。

3)每个任务场景的线程最好都有自己的线程名称,这样便于出现问题进程日志排查,因此,不同的场景最好还是使用自己独立的线程池,也便于区分线程名称与业务场景的对应关系。

三、总结

Java多场景任务需求还是建议使用各自独立线程池,这些线程池可能来自JDK内部定义的,也可能是第三方jar包提供的,根据自己的实际的需求进行选择与配置,而独自为不同业务场景定义自己的线程池也保证了它更大的灵活性。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/8215.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号