首页 > 其他分享 >46.ThreadPoolExcutor接口

46.ThreadPoolExcutor接口

时间:2024-06-03 23:34:01浏览次数:21  
标签:ThreadPoolExcutor 策略 46 接口 队列 任务 线程 救急 执行

线程池状态

ThreadPoolExcutor使用int高3位来表示线程池状态,低29位表示线程数量

状态高三位接收新任务处理阻塞队列任务说明
RUNNING111YY
SHUTDOWN000NY不会接收新任务,但会处理阻塞队列剩余任务,比较温和,已经提交的任务都会执行。
STOP001NN会中断正在执行的任务,并抛弃阻塞队列任务,比较暴力。
TIDYING010任务全部执行完毕,活动线程为0即将进入终结
TERMINATED011终结状态

从数字上比较:

TERMINATED > TIDYING > STOP > SHUTDOWN > RUNNING

RUNNING 111, 最高位1表示负数。

 问题

为啥将线程池的状态和线程数量存在一个int类型的变量中?

存储在一个原子变量ctl中,目的是将线程池状态与线程个数合二为一,这样就可以用一次cas原子操作进行赋值。

构造方法

corePoolSize 核心线程数目(最多保留的线程数)

maxmumPoolSize 最大线程数目

keepAliveTime 生存时间-针对救急线程

unit 时间单位-针对救急线程

workQueue 阻塞队列

threadFactory 线程工厂-可以为线程创建时起好名字

handler 拒绝策略

最大线程数 = 核心线程数 + 救急线程数

执行流程:先给核心线程执行任务,然后再将线程放到阻塞队列中,最后给救急线程执行任务,最后执行拒绝策略。

最开始线程池里是没有线程的,属于一种懒加载,只有有任务要执行的时候,才会创建线程。

救急线程与核心线程的区别:

救急线程是有存活时间的。

核心线程执行完任务会一直保留在线程池中。

拒绝策略:

AbortPolicy 让调用者抛出RejectedExecutionException异常,默认策略。

CallerRunsPolicy 让调用者运行任务。

DiscardPolicy 放弃本次任务。

DiscardOldestPolicy 放弃队列中最早的任务,本任务取而代之。

这是jdk提供的这四种拒绝策略都实现了RejectedExecutionHandler接口: 

还有第三方框架提供的实现

1.Dubbo实现,抛出RejectedExecutionException异常之前会记录日志,并dump线程栈信息,方便定位问题。

2.Netty实现,创建一个新线程来执行任务。

3.ActiveMQ的实现,带超时等待60s尝试放入队列,类似之前自定义拒绝策略。

4.PinPoint的实现,使用了一个拒绝策略链,会逐一尝试策略链中没中拒绝策略。

标签:ThreadPoolExcutor,策略,46,接口,队列,任务,线程,救急,执行
From: https://blog.csdn.net/qq_36352889/article/details/139425932

相关文章

  • java使用百度地图接口校验收货地址是否超出配送范围
    1.地理编码API服务地址:https://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocationMapmap=newHashMap();map.put("address",shopAddress);map.put("output","......
  • 千兆PHY与RJ45接口线序
      千兆PHY通过网络变压器连接到RJ45接口,一共有4对差分线MDI[0..3]+/-。一般的接法是:MDI[0]+:RJ45[1]MDI[0]-:RJ45[2]MDI[1]+:RJ45[3]MDI[1]-:RJ45[6]MDI[2]+:RJ45[4]MDI[2]-:RJ45[5]MDI[3]+:RJ45[7]MDI[3]-:RJ45[8]RJ45[1..8]连接器的线序与......
  • 韩国指数实时API接口
    韩国指数实时API接口#RestfulAPIhttps://tsanghi.com/api/fin/index/KOR/realtime?token={token}&ticker={ticker}指定指数代码,获取该指数的实时行情(开、高、低、收、量)。更新周期:实时。请求方式:GET。#测试https://tsanghi.com/api/fin/index/KOR/realtime?......
  • 淘宝商品评论数据接口(Taobao.item_review)丨淘宝实时API接口指南
    淘宝商品评论数据接口(Taobao.item_review)是淘宝开放平台提供的一个API,用于获取商品的评论信息。该接口对于商家分析商品反馈、顾客满意度以及进行市场研究具有重要意义。下面将介绍如何高效利用这一接口:一、注册和获取权限注册开发者账号:在淘宝开放平台注册一个开发者账号,......
  • 印度指数实时API接口
    印度指数实时API接口#RestfulAPIhttps://tsanghi.com/api/fin/index/IND/realtime?token={token}&ticker={ticker}指定指数代码,获取该指数的实时行情(开、高、低、收、量)。更新周期:实时。请求方式:GET。#测试https://tsanghi.com/api/fin/index/IND/realtime?......
  • 天猫商品评论数据接口(Tmall.item_review)丨天猫实时API接口指南
    天猫商品评论数据接口(Tmall.item_review)是一个强大的工具,它允许开发者通过编程方式获取天猫平台上商品的评论数据。这些数据通常包括评论内容、评价时间、评价等级等信息,对于商家来说,这些信息是非常宝贵的,因为它们可以帮助商家更好地了解客户需求和市场趋势,为商品营销和品质改......
  • 打印完整的接口请求信息
    遇到的问题:  1、做接口测试时遇到问题,经常碰到开发要求发出完整的请求入参,脚本写的都是拼接前的数据  2、实际调用接口的数据都是加密后的数据,可能是因为加密出现的问题,需要具体的入参来排查"""打印完整的请求信息"""importrequestsdeftest_r(mothod,url,params......
  • 压力测试接口选择策略指南
    选择哪些接口进行压力测试是确保系统在高负载下仍能正常运行的关键步骤。以下是一些策略,可以帮助你确定哪些接口需要进行压力测试:###1.业务关键性- 核心功能接口:选择那些对业务运作至关重要的接口。例如,支付、订单处理、用户登录等。- 高流量接口:识别那些在正常运......
  • 内网部署api接口文档服务器端口如何让外网访问?
    计算机业内人士对于swagger并不陌生,不少人选择用swagger做为API接口文档管理。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器端的代......
  • 淘宝商品id怎么实现批量自动获取?通过关键字搜索接口来获取批量商品id(淘宝API)
    item_search-按关键字搜索淘宝商品传入商品关键字,通常在商品标题中进行检索,将包含此关键字的商品展示出来,分页展示。公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,i......