一文拿捏线程池

news2024/10/2 16:25:58

1 谈谈你对线程池理解

1 概念
线程池是一种用于管理线程的机制,核心思想是资源复用,避免频繁地创建和销毁线程所带来的性

能开销。

2 原理
线程池的原理是预先创建一定数量的线程,并将它们放入一个线程池中。当有任务需要执行时,从

线程池中取出一个空闲线程来执行该任务,如果所有线程都在忙,则任务会被放入队列中等待

2 自定义线程池参数以及每个参数设置了多少

JUC的工具类也会提供一些实例化线程池的方法,但是我们项目中并没有使用,因为都会有潜在的OOM风险,所以我们是对这些参数做了定制,具体是这样的

corePoolSize(核心线程数):

cpu+1 这个参数要根据具体的服务器配置来定

maximumPoolSize (救急线程):

cpu核数*2 这个参数我们考虑到能够对任务处理最大化,设置的都比较大

keepAliveTime (救急线程过期时间):

60

TimeUnit(时间单位):

一般是s

ThreadFactory(线程工厂) :

我们项目采用的默认提供的

BlockingWorkQueue (阻塞队列) :

这个参数首光要保证的有界,其次,再根据是否有对执行有效有更高要求的场景

如果有,采用ArrayBlockingQueue反之采用LinkedBlockingQueue

RejectedExecutionHandler(拒绝策略):

我们一般用AbortPolicy拒绝并抛出异常其实就是考虑到一旦日志中检测到了拒绝执行异常的时候,及时动态调整其他参数

3 线程池执行逻辑

在这里插入图片描述

线程池创建,准备好 corePoolSize(核心线程数量)的线程,准备接收任务。

新的任务进来,用core准备好的空闲线程执行

若核心线程满了,就将再进来的任务放入阻塞队列中。空闲的core就会自己去阻塞队列获取任务执行。

阻塞队列满了,就直接开新线程执行,最大只能开到maximumPoolSize最大核心线程数指定的数量

若最大线程数量满了,就交给拒绝策略去处理。

4 拒绝策略有几种?

AbortPolicy (终止策略):,丢弃任务,并抛出异常。(jdk默认策略)

DiscardPolicy (丢弃策略):丢弃任务,不抛出异常

DiscardOldestPolicy(弃老策略):丢弃队列最前面的任务,然后重新执行任务

CallerRunsPolicy (调用方策略): 既不丢弃任务也不抛出异常,而是将某些任务回退到调用者,让调用者去执行它

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

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

相关文章

人工智能(AI)技术的实际应用

人工智能(AI)技术在各个领域都有广泛的实际应用。这些示例只是AI技术的一小部分应用,AI正在不断演化中。以下是一些常见的实际AI应用示例,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司&#…

动态内存管理之经典笔试题

目录 C/C程序的内存开辟 题目1 题目2 题目3 题目4 今天我们来接着讲几道经典的笔试题。首先来了解一下c\c程序的内存开辟,使我们做题的头脑更加清晰。 C/C程序的内存开辟 内核空间 是用户代码不能读写的栈区是用来开辟 局部变量 形式参数,函数栈…

0基础学python,给大家首推这些书!

对于0基础的人来说,学习Python首推的书就是这本 《Python 编程:从入门到实践》 。 这本书常居各网站编程图书销量榜第一名,目前在全球范围内被翻译成 12 国语言,仅在中国就帮助了超过 120 万对 Python 有需求的学习者入门&#x…

【华为OD机考B卷 | 100分】五子棋迷(JAVA题解——也许是全网最详)

前言 本人是算法小白,甚至也没有做过Leetcode。所以,我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 1. 题目描述 张兵和王武是五子棋迷,工作之余经常切磋棋艺。走了一会儿,轮到张兵了,他对着一条线思…

Vue CLI和Vite区别

1.Vue CLI脚手架 什么是Vue脚手架? 在真实开发中我们不可能每一个项目从头来完成所有的webpack配置,这样显示开发的效率会大大的降低;所以在真实开发中,我们通常会使用脚手架来创建一个项目,Vue的项目我们使用的就是…

在线世界各国语言翻译器

最近失业,无聊之极,想着搞点啥东西,一上午撸了一个世界各国语言跟汉语的互相翻译的功能,提供的语言列表无所不包含,这里列一下给大家看看,算了语言列表实在太长了,我还是把界面先放前面吧, 对的…

vue-5

一、文章内容概括 1.自定义指令 基本语法(全局、局部注册)指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例:商品列表 MyTag组件封装MyTable组件封装 4.路由入门 单页应用程序路由VueRouter的基本使用 二…

常用求解器安装

1 建模语言pyomo Pyomo是一个Python建模语言,用于数学优化建模。它可以与不同的求解器(如Gurobi,CPLEX,GLPK,SCIP等)集成使用,以求解各种数学优化问题。可以使用Pyomo建立数学优化模型&#xf…

笔试强训选择题

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻Day7 👉&#x…

抖音seo源码开发部署市场分析及注意事项分享---SaaS开源

抖音seo源码开发部署市场背景分析 对于抖音SEO源码开发部署的背景分析,可以从以下几个方面来展开: 抖音平台的发展和趋势:随着移动互联网的快速发展,抖音作为短视频领域的领军企业,其用户规模和市场规模也在不断扩大。…

2023年中国电容炭受益于超级电容器需求及进口替代双重驱动,行业呈快速增长态势[图]

电容炭是目前在超级电容器领域实现商业化应用的最为主要的电极材料。电容炭具有“三高三低”的优势,即高比表面积、高孔容、高电导率、低灰分、低金属离子、低粒径,是超级电容电极的核心材料。 电容炭是超级电容器的电极材料。电容炭指标关系着超级电容器…

Vue 识别移动设备还是PC设备跳转相应的路由

1. 先在router/index.js文件中配置好不同端口跳转的路由 import Vue from vue import VueRouter from vue-router// 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题 const originalPush VueRouter.prototype.push VueRouter.prototype.push function pu…

GitHub要求开启2FA,否则不让用了。

背景 其实大概在一个多月前,在 GitHub 网页端以及邮箱里都被提示:要求开启 2FA ,即双因子认证;但是当时由于拖延症和侥幸心理作祟,直接忽略了相关信息,毕竟“又不是不能用”。。 只到今天发现 GitHub 直接…

超越日历的智慧:探索节日节气、宜忌和星座生肖等信息的万年历API

引言 当今社会,人们对时间的需求不仅仅是简单地知道日期,更多地是追求个性化、文化化和精确化的时间信息。在这个背景下,万年历API变得越来越重要,因为它可以提供超越传统日历的智慧,为我们带来了丰富的日期信息&…

JVM篇---第十篇

系列文章目录 文章目录 系列文章目录一、对象头具体都包含哪些内容?二、你知道哪些JVM调优参数?三、说一下 JVM 有哪些垃圾回收器?一、对象头具体都包含哪些内容? 在我们常用的Hotspot虚拟机中,对象在内存中布局实际包含3个部分: 对象头实例数据对齐填充 而对象头包含两…

ESD门禁闸机的使用说明

ESD门禁闸机是一种用于控制静电敏感区域人员出入的门禁设备,具有防静电和防电磁干扰的功能。以下是ESD门禁闸机的使用方法: 门禁卡或密码的获取:员工需要在公司或部门领取门禁卡或设置个人密码,方可进入静电敏感区域。 门禁卡或…

2023年中国CEM-3型覆铜板市场供需现状、销售收入及行业趋势分析[图]

CEM-3指覆铜板的一种,以玻纤布半固化片与玻纤粘半固化片层压铜箔达到固化形成的板材,属于复合型基材,CEM-3由于其良好的加工性能主要用于FR-4中厚板的替代,有着良好的发展前景。 随着CEM-3覆铜板品质的不断改进和提高,…

如何领取京东优惠券用微信支付还是用支付宝支付购买商品?

京东用微信支付还是用支付宝支付? 京东商城购物不支持支付宝支付,现京东商城支持的支付方式包括:京东支付、银行卡、信用卡、微信支付、云闪付等; 京东如何领取优惠券用微信支付购物? 1、打开京东APP,挑选…

程序员副业大揭秘:如何利用技术优势实现财富自由?

文章目录 为什么考虑副业?1. 多样化的收入来源2. 财务自由3. 技能提升4. 创业机会 如何选择适合的副业?1. 利用技术优势2. 兴趣和激情3. 市场需求4. 时间管理 实际操作:从副业想法到实际项目1. 制定计划2. 学习和发展技能3. 建立在线存在4. 寻…

Spring在业务中常见的使用方式

目录 通过IOC实现策略模式 通过AOP实现拦截 通过Event异步解耦 通过Spring管理事务 通过IOC实现策略模式 很多时候,我们需要对不同的场景进行不同的业务逻辑处理举个例子,譬如不同的场景需要不同支付方式,普通的逻辑是使用if-else&#x…