Java面试八股之线程池是怎么实现的

news/2024/9/20 1:31:56/ 标签: java, 开发语言
  1. 线程池是怎么实现的

线程池是一种基于池化技术的线程管理方式,通过预先创建一定数量的线程并保持在池中待命,从而在有任务来临时能够快速分配线程处理任务,而无需频繁创建和销毁线程,以此达到提升系统性能、减少资源消耗的目的。

Java中的线程池实现 -ThreadPoolExecutor

Java中最常用的线程池实现是java.util.concurrent.ThreadPoolExecutor类,它实现了ExecutorService接口。ThreadPoolExecutor的设计围绕着几个关键组成部分:

corePoolSize(核心线程数):

定义了线程池中的常驻核心线程数。即使这些线程当前是空闲的,它们也会一直存在,除非设置了allowCoreThreadTimeOut为true,此时核心线程在空闲时也会超时终止。

maximumPoolSize(最大线程数):

表示线程池能够容纳同时执行的最大线程数,包括核心线程和非核心线程。当活动线程数达到这个值后,新任务将会被阻塞或拒绝。

keepAliveTime(空闲线程存活时间):

当线程数超过核心线程数时,超出的空闲线程在等待新任务的最长时间。达到这个时间后,多余的空闲线程会被终止,直到线程数减少到核心线程数。

unit(存活时间单位):

用于指定keepAliveTime参数的时间单位,例如TimeUnit.SECONDS(秒)、TimeUnit.MILLISECONDS(毫秒)等。

workQueue(工作队列):

用于保存待处理的任务队列。当线程池中的线程数目达到最大值时,新提交的任务会存储在这个队列中等待执行。JDK提供了多种队列实现,如ArrayBlockingQueue(有界队列)、LinkedBlockingQueue(可选边界队列,默认情况下是无界的)、SynchronousQueue(直接交换,通常用于无缓冲的生产者-消费者场景)和PriorityBlockingQueue(带优先级的队列)。

threadFactory(线程工厂):

用于创建新线程的工厂,可以用来设置线程的优先级、线程组、名称等属性。如果不指定,默认使用Executors.defaultThreadFactory()。

handler(拒绝策略):

当线程池和任务队列都达到饱和时(即无法再接受新任务),用于处理额外任务的策略。有四种预定义的策略:

AbortPolicy:默认策略,抛出RejectedExecutionException异常。

CallerRunsPolicy:调用者运行任务的策略,即提交任务的线程自己执行该任务。

DiscardPolicy:静默丢弃无法处理的任务,不抛出异常。

DiscardOldestPolicy:丢弃队列中最旧的任务,并尝试重新提交当前任务。

实现原理简述

任务提交:当一个新任务通过execute()方法提交给线程池时,线程池首先会尝试直接将任务交给核心线程执行。

线程创建与任务调度:如果核心线程都在忙且任务队列未满,则新任务会被放入任务队列等待。如果任务队列已满,且当前线程数小于最大线程数,那么会创建新的线程来执行任务。

线程回收:当线程池中的线程数量超过核心线程数并且有线程空闲超过keepAliveTime时,这些空闲线程会被终止,直到线程数量降到核心线程数。

 如果大家需要视频版本的讲解,欢迎关注我的B站:


http://www.ppmy.cn/news/1463635.html

相关文章

POSEIDON: Privacy-Preserving Federated NeuralNetwork Learning

写在最前面,感觉这一篇的技术更贴近于密码学,所以部分核心技术读起来比较吃力。仅供大家参考哇~ Abstract—In this paper, we address the problem of privacypreserving training and evaluation of neural networks in an N-party, federated learni…

css用什么单位适应屏幕最合适

在CSS中,要适应屏幕大小,最常用的单位是相对单位,特别是与视窗(viewport)相关的单位,如vw(视窗宽度的百分比)、vh(视窗高度的百分比)、vmin(视窗宽…

【数据结构】链式二叉树(超详细)

文章目录 前言二叉树的链式结构二叉树的遍历方式二叉树的深度优先遍历前序遍历(先根遍历)中序遍历(中根遍历)后序遍历(后根遍历) 二叉树的广度优先遍历层序遍历 二叉树链式结构接口实现二叉树结点个数二叉树叶子结点个数二叉树的深度(高度)二叉树第k层结…

【Redis】 关于 Redis 集合类型

文章目录 🍃前言🌳普通命令🚩sadd🚩smembers🚩sismember🚩scard🚩spop🚩smove🚩srem 🌲集合间操作🚩sinter🚩sinterstore&#x1f6a9…

ECMAScript 深度解析:现代 JavaScript 综合指南

JavaScript,作为无所不在的 Web 语言,其背后的标准规范称为 ECMAScript。无论您是经验丰富的 Web 开发人员还是刚开始编程之旅的新手,理解 ECMAScript 都是释放 JavaScript 全部潜能并构建动态交互式应用程序的关键。在本文中,我们…

RabbitMQ不完整的笔记

同步的不足 1、拓展性差,当要添加功能时,需要在原来的功能代码上做修改,高耦合。 2、性能下降,调用者需要等待服务提供者执行完返回结果后,才能继续向下执行 3、级联失败,由于我们是基于OpenFeign调用交易…

C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

掌握SQL注入检测:深入理解SQLMAP工具

引言 在网络安全领域,SQL注入是一个广泛存在的漏洞,它允许攻击者通过Web应用对数据库执行非法的SQL命令。SQLMAP是检测这类漏洞的顶尖工具之一。本文将深入探讨SQLMAP工具,从其基本介绍到高级使用技巧,帮助读者全面理解并有效运用…

Java基础入门day57

day57 JSP、Servlet&#xff0c;Java bean和JDBC整合项目 index.jsp页面 <% page contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %> <!DOCTYPE html> <html> <head><title>JSP - Hello World</title> …

Spring MVC的请求流程

Spring MVC&#xff08;Model-View-Controller&#xff09;是一种基于Java的实现了MVC设计模式的轻量级Web框架。它通过一套注解&#xff0c;可以快速地搭建一个可扩展、易维护的Web应用程序。下面是Spring MVC处理请求的基本流程&#xff1a; 用户发起请求&#xff1a;用户通过…

2024电激世界脉动-中国汽车品牌全球化制胜手册

来源&#xff1a;奥美Ogilvy&#xff1a; 近期历史回顾&#xff1a; 2024中国宏观经济专题报告-数据要素市场建设 2023-2024年度报告.pdf 2024制药与生化医疗技术产业链白皮书.pdf 从可再生能源到绿氢-中国投资助力埃及能源转型.pdf 2024有机旅行中国行业指引.pdf 2024中国技术…

Go源码--sync库(1)

简介 这篇主要介绍 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顾名思义 只执行一次 废话不说 我们看源码 英文介绍直接略过了 感兴趣的建议读一读 获益匪浅 其结构体如下 Once 是一个严格只执行一次的object type Once struct {// 建议看下源码的注解&#xf…

Web组态可视化编辑器 快速绘制组态图

演示地址&#xff1a;by组态[web组态插件] 随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于…

postman调用Grpc

环境&#xff1a; .net6.0 一、准备 安装nuget&#xff1a; Grpc.AspNetCore Google.Protobuf Grpc.Core.Api Grpc.Tools Grpc.AspNetCore.Server.Reflection Program.cs&#xff1a; public class Program{public static void Main(string[] args){var builder WebApplicat…

OpenCV Haar小波变换

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 图像Haar小波变换是一种基于小波分析的信号处理技术,特别适用于图像处理领域。以下是关于图像Haar小波变换过程: 分解:(1)假设原始图像为f(x,y),其中(x,y)表示图像上的像素坐标。 (2)对原始图像进行Haar小…

python web自动化(Pytest实战)

1.UnitTest框架与Pytest框架对⽐ 1&#xff09; unittest框架介绍 Unittest则是Python语⾔的标准单元测试框架。 Unittest⽀持⾃动化测试&#xff0c;测试⽤例的初 始化、关闭和测试⽤例的聚合等功能&#xff0c;它有⼀个很重要的特性&#xff…

瑞吉外卖项目学习笔记(一)

项目展示&#xff1a; 一、软件开发整体介绍 1.1 软件开发流程 作为软件开发人员&#xff0c;我们的主要工作是在 编码阶段 1.2 角色分工 1.3 软件环境 二、瑞吉外面项目介绍 2.1 项目介绍 系统管理后台页面&#xff1a; 移动端页面&#xff1a; 2.2 产品原型展示 产品原型是…

Python库之PyQuery的高级用法深度解析

Python库之PyQuery的高级用法深度解析 引言 PyQuery是一个强大的Python库&#xff0c;它提供了类似于jQuery的语法来解析和操作HTML和XML文档。虽然PyQuery的基本用法已经相当直观&#xff0c;但本文将深入探讨一些高级用法&#xff0c;帮助开发者更高效地处理复杂的HTML文档…

若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word

组件地址 https://github.com/houbb/sensitive-word 网上博客版本不是最新&#xff0c;查看官方文档&#xff0c;基于0.16.1整理总结&#xff0c;快速上手 pom文件引入 <dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word…

图像处理之计算物体的方向(C++)

图像处理之计算物体的方向&#xff08;C&#xff09; 文章目录 图像处理之计算物体的方向&#xff08;C&#xff09;前言一、PCA获取物体主要方向1.原理2.代码实现 二、Hu矩获取物体主要方向1.原理2.代码实现 总结 前言 在图像处理中&#xff0c;物体的方向&#xff08;倾斜角…