【JUC】动态线程池

一、背景

需求:动态调整参数、细粒度监控、秒级监控

线程池参数调优,需要不断的进行测试,判断内存占用等因素,调优没法热部署

别再纠结线程池大小了,没有固定公式

二、美团DynamicTp

dynamictp官网
源码
掘金专栏
Java线程池实现原理及其在美团业务中的实践

(一)核心功能

  • 动态调参
    • 线程池的核心大小
    • 最大线程大小
    • 队列长度
  • 任务监控
    • 线程池的任务执行情况
    • 最大任务执行时间
    • 平均任务执行时间
  • 负载告警
    • 线程池负载数达到一定的阈值
  • 操作日志
    • 参看线程池参数的修改记录在这里插入图片描述

原理

(1)动态更新

直接调用 JDK 的 setCoreThreadSize等方法(public)
只能修改核心线程数

(2)监控

作为Bean注入容器,修改配置后,通过发布Eventt,异步通知到钉钉群

(3)注意事项

1.普通 JUC 线程池想要被监控,可以 @Bean 定义时加 @DynamicTp 注解

2.动态线程池实例服务启动时会根据配置中心的配置动态注册到Spring容器中,建议不要用@Bean编程式重复声明同一线程池实例,直接配置在配置中心就行

3.阻塞队列只有 VariableLinkedBlockingQueue 类型可以修改 capacity。

该类型功能和 LinkedBlockingQueue 相似, 只是 capacity 不是 final 类型,可以修改,VariableLinkedBlockingQueue 参考 RabbitMq 的实现

(二)adapter模块

功能解读

主要是用来适配一些第三方组件的线程池管理,让第三方组件内置的线程池也能享受到动态参数调整,监控告警这些增强功能。

1,Jetty
2,Undertow
3,Dubbo线程池
4,RocketMq
5,Hystrix

三、案例

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ThreadPoolExecutor 是 Java 中的一个线程池实现,它提供了一种管理线程的机制,可以有效地控制线程的数量,避免因为线程过多而导致系统资源的浪费和性能下降。 ThreadPoolExecutor 的主要构造函数如下: ``` public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) ``` 其中,各个参数的含义如下: - `corePoolSize`:核心线程数,即线程池中保持的最少线程数。 - `maximumPoolSize`:线程池所能容纳的最大线程数。 - `keepAliveTime`:线程池中超过 `corePoolSize` 的空闲线程能够存活的最长时间。 - `unit`:`keepAliveTime` 的时间单位。 - `workQueue`:任务队列,用于保存等待执行的任务。 - `threadFactory`:线程工厂,用于创建新线程。 - `handler`:拒绝策略,用于当任务队列满了且当前线程数已达到最大线程数时如何处理新任务。 ThreadPoolExecutor 在初始化时会创建 `corePoolSize` 个线程,并将剩余的任务添加到任务队列 `workQueue` 中。当任务队列满了时,如果当前线程数小于 `maximumPoolSize`,则会创建新的线程来执行任务;如果当前线程数已达到最大线程数,则会根据拒绝策略 `handler` 来处理新任务。 ThreadPoolExecutor 还提供了一些方法,如 `execute()`、`submit()`、`shutdown()` 等,用于提交任务、关闭线程池等操作。需要注意的是,当使用完线程池后,应该及时调用 `shutdown()` 方法来关闭线程池以释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机智的路易

用爱发电是走不远的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值