线程池问题处理

news2024/9/22 21:29:28

拒绝策略

AbortPolicy:默认的拒绝策略,直接抛出RejectedExecutionException异常。

CallerRunsPolicy:将任务退回给调用者执行。

场景

等线程池里的任务执行完通过future.get的方式获取线程池里的线程执行结果,然后合并到主流程的结果里返回给前端。

代码

// 如果线程池已满,新的请求会直接执行拒绝策略
Future<String> future = executor.submit(() -> {
    // 业务逻辑,比如调用第三方接口等耗时操作放在线程池里执行
    return result;
});

// 主流程调用逻辑
if(future != null) // 如果拒绝策略设置不合理还是会走到下面代码
  future.get(超时时间); // 调用方阻塞等待结果返回,直到超时

问题

当线程池达到最大负荷时执行的拒绝策略是让主流程去执行提交到线程池里的任务,这样除了进一步加剧整个接口的耗时外,还会导致主流程被hang死,最关键的是无法确定是在哪一步执行提交到线程池的任务。

DiscardPolicy:直接丢弃任务,不做任何处理。

DiscardOldestPolicy:丢弃最老的一个任务,然后尝试再次提交当前任务。

线程池的执行流程

在这里插入图片描述
1.线程池中线程数小于corePoolSize时,新任务将创建一个新线程执行任务,不论此时线程池中存在空闲线程;
2.线程池中线程数达到corePoolSize时,新任务将被放入workQueue中,等待线程池中任务调度执行;
3.当workQueue已满,且maximumPoolSize>corePoolSize时,新任务会创建新线程执行任务;
4.当workQueue已满,且提交任务数超过maximumPoolSize,任务由RejectedExecutionHandler处理;
5.当线程池中线程数超过corePoolSize,且超过这部分的空闲时间达到keepAliveTime时,回收该线程;
6.如果设置allowCoreThreadTimeOut(true)时,线程池中corePoolSize范围内的线程空闲时间达到keepAliveTime也将回收;

核心参数

基于上述描述需要参数
corePoolSize 核心线程
workQueue 任务队列,被提交但尚未被执行的任务
maximumPoolSize 线程池能够容纳同时执行的最大线程数,此值大于等于1。
keepAliveTime:多余的空闲线程存活时间,当空间时间达到keepAliveTime值时,多余的线程会被销毁直到只剩下corePoolSize个线程为止。
unit:keepAliveTime的单位。
handler:拒绝策略。
threadFactory:表示生成线程池中工作线程的线程工厂,用户创建新线程,一般用默认即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化平台总结(httprunner+djangorestframework+python3+Mysql+Vue)【基础结构构思】

目录 一、前言 二、简介 三、整体结构 &#x1f381;更多干货 完整版文档下载方式&#xff1a; 一、前言 把一个以前自己搭建的自动化测试平台进行了一下重构升级&#xff0c;记录一下过程中的一些问题和总结。 二、简介 搭建的平台语言使用的是Python3.6&#xff0c;未来…

Oracle中没有show tables;如何用指令来显示表名,Excel关于VLOOKUP函数的使用。

一、问题&#xff1a;Oracle中没有show tables;如何用指令来显示表名。 解决方案&#xff1a; owner NAPSDEV更换为owner CNAPSIIDB。NAPSDEV是用户名&#xff0c;CNAPSIIDB是数据库名。在这里&#xff0c;我想让它显示的是我在Navicat中的CNAPSIIDB数据库下的所有表的名称。所…

Python - Django框架 - 简单运行

pycharm创建django项目 确保安装了Python 安装django pip install Django 创建django项目 django-admin startproject django_study 切换到django目录并启动 cd django_study python manage.py runserver 开发服务器将在默认的localhost:8000上运行&#xff0c;可以在浏览器中访…

vue-cute-timeline插件使用

效果 &#xff08;内容覆盖的有些丑&#xff0c;别在意哈&#xff0c;重点是时间线的展示&#xff09;element也有类似的时间线&#xff0c;但是不能使用类似这样的图片 所以就采用了vue-cute-timeline插件 使用方法&#xff08;可自行百度&#xff09; 安装&#xff1a;npm i…

服务器防止漏洞扫描解决方案

1、定期更新操作系统与应用程序 为了修复可能存在的漏洞和安全问题&#xff0c;建议定期对服务器的操作系统与应用程序进行更新。特别是对于那些常常成为黑客攻击目标的应用程序&#xff0c;比如WordPress等&#xff0c;更新是不可或缺的。通过更新&#xff0c;不仅可以增强服…

管理执行系统-亿发MES智能制造系统赋能制造企业信息化,实现工业现代化

在制造技术领域&#xff0c;质量控制信息集成建设需要健全的管理体系&#xff0c;加强全过程管理。虽然管理执行系统 (MES) 背后的理论思维已经取得了重大进展&#xff0c;但在软件应用集成和分析能力方面仍有改进的空间。本文将探讨MES系统如何赋能制造企业信息化&#xff0c;…

Linux内核源码下载

参考文章&#xff1a;https://blog.csdn.net/m0_49328056/article/details/121669035 一、git命令下载 1、进入官网&#xff1a;https://www.kernel.org/ mainline&#xff08;主线版本&#xff09;、stable&#xff08;稳定版本&#xff09;、longterm&#xff08;长期演进版…

DAY41:贪心算法(十)监控二叉树

文章目录 968.监控二叉树思路遍历顺序空节点处理情况列举 最开始的写法debug测试&#xff1a;travelsal的输出多了1 修改版二叉树注意点时间复杂度总结 968.监控二叉树 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及…

SpringBoot多模块项目整合JPA,解决被依赖模块Dao层无法注入的问题

DAO层&#xff1a; 报错&#xff1a; 解决办法&#xff1a;被依赖模块的DefaultConfig类加上如下注解&#xff0c;问题即解决 ComponentScan(basePackages "com.fdw.study.*") Configuration EnableJpaRepositories(value "com.fdw.study.dao") EntityS…

Linux0.11内核源码解析-read_write.c

目录 sys_lseek read write read_write.c主要是实现文件系统调用read(),write()和lseek()三个功能 read和write函数分别是调用file_dev.c/pipe.c/block_dev.c/char_dev.c实现相对应的函数 sys_lseek lseek实现系统调用将对文件句柄对应文件结果体中的当前读写指针进行修改&…

matplot 显示文本

import matplotlib.pyplot as plt# 绘制一些数据 x_data [1, 2, 3, 5] y_data [2, 4, 8, 10] plt.plot(x_data, y_data,o,markersize 20)# 添加文本注释 text [a,b,c,d] for i in range(4):plt.text(x_data[i], y_data[i],text[i], fontdict{family: serif, size: 16, col…

leetcode极速复习版-第五章栈与队列

目录 栈与队列 理论基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 239.滑动窗口最大值 347.前 K 个高频元素 栈与队列 理论基础 队列是先进先出&#xff0c;栈是先进后出。 232.用栈实现队列 使用栈实现队…

动态路由,微信小程序绑定

■登录成功之后添加动态路由 ●登录的时候会获取到它的菜单配置■动态路由 | Vue Router <view wx:for"{{list}}">{{index}}--- {{item.name}} </view><view wx:for"{{list}}" wx:for-item "ttt" wx:for-index"num"&…

第二节 给SpringBootAdmin的server端加入spring security安全控制

前言 本来想用一节就写完SpringBootAdmin的&#xff0c;但随着研究的深入发现一节应该是不够的&#xff0c;网上的资料也不会非常系统&#xff0c;官网的例子有些已经好几年没更新了&#xff0c;所以接下来还是系统性的来写下吧 第一节 完成基础配置&#xff0c;暴露所有端点…

Qt-->QQ登陆界面图形化界面

#include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);this->setFixedSize(640,520);//设置窗口标题this->setWindowTitle("QQ&qu…

勒索病毒危害,企业该如何预防勒索病毒

勒索病毒是一种恶意软件&#xff0c;它会对企业内的计算机系统或数据进行加密或锁定&#xff0c;并要求企业支付赎金以解锁或解密。 勒索病毒危害&#xff1a; 数据丢失&#xff1a;勒索病毒可以加密您的文件、照片、视频和其他重要数据&#xff0c;使其无法访问或恢复。如果…

解决centos7和主机win11不能互传文件复制粘贴;及CentOS7最小安装版 VMware Tools安装

linux.iso 中的文件已经加载到 /mnt/cdrom 目录下了。在 /mnt/cdrom 中找到加载出来的文件并拷贝到 /tmp目录下&#xff0c;进行解压。解压好后从中找到 vmware-install.pl&#xff0c;这是vmware tools的安装文件&#xff0c;执行此文件开始安装 ./vmware-install.pl 一路Ente…

宏基因组碳循环高分分析思路,你值得拥有!

碳是生命物质中的主要元素之一&#xff0c;是有机质的重要组成部分。地球上主要有四大碳库&#xff0c;即大气碳库&#xff0c;海洋碳库、陆地生态系统碳库和岩石圈碳库。碳循环&#xff0c;是指碳元素在自然界的循环状态&#xff0c;大气中的二氧化碳&#xff08;CO2&#xff…

Shamir秘密共享

目录 Shamir秘密共享 秘密共享的概念 问题1: 问题2: 秘密分割门限方案的定义 Shamir秘密共享方案 组成 构造思路 构造 计算f(x) 例1 例2 二、GMW方案 Shamir秘密共享 秘密共享的概念 问题1: 保险柜中存放有10个人的共有财产&#xff0c;要从保险柜中取出物品&am…

【Python编程系列】5、变量

作用 变量用来存储数据: a = 10使用规则 python作为解释型,属于弱类型和动态型语言。它不需要强制声明变量的数据类型,因为它不需要编译。一般要编译的语言需要明确所有的东西,只有这样才能编译成二进制文件。 由于不需要声明数据类型,那么在声明变量时会一并赋值: …