CorePoolExecutor夺命连环问?看你可以接受几招?

news2024/11/25 8:18:04

一、前言 

今天我在看why技术的时候,看到了这个。发现这个没有全部的八股回答?于是我就结合自己的经验,分享下八股

二、八股问答

2.1了解JDK Executors线程池吗?

Executor就是一个线程池框架,在开发中如果需要创建线程可优先考虑使用Executor,无论你需要多线程还是单线程,Executor为你提供了很多其他功能,包括线程状态,生命周期的管理。

Executor 位于java.util.concurrent.Executors ,提供了用于创建工作线程的线程池的工厂方法。

2.2知道JDK提供了哪些默认的实现吗?

  • FixedThreadPool(n):创建一个数量固定的线程池,超出的任务会在队列中等待空闲的线程,可用于控制程序的最大并发数。
  • CachedThreadPool():短时间内处理大量工作的线程池,会根据任务数量产生对应的线程,并试图缓存线程以便重复使用,如果限制 60 秒没被使用,则会被移除缓存。
  • SingleThreadExecutor():创建一个单线程线程池。
  • ScheduledThreadPool(n):创建一个数量固定的线程池,支持执行定时性或周期性任务。
  • SingleThreadScheduledExecutor():此线程池就是单线程的 newScheduledThreadPool。
  • WorkStealingPool(n):Java 8 新增创建线程池的方法,创建时如果不设置任何参数,则以当前机器处理器个数作为线程个数,此线程池会并行处理任务,不能保证执行顺序。

2.3 看过阿里巴巴java开发手册吗?知道为啥不允许使用默认的实现吗?

线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。

2.4 你们没有用默认的吧?那来介绍一下你们自定义线程池的几个常用参数呗?

  • corePoolSize 核心线程池的大小
  • maximumPoolSize 最大线程池大小
  • keepAliveTime 线程池中超过corePoolSize数目的空闲线程最大存活时间;可以allowCoreThreadTimeOut(true)使得核心线程超出有效时间也关闭
  • TimeUnit keepAliveTime的时间单位
  • workQueue阻塞任务队列
  • threadFactory新建线程工厂
  • RejectedExecutionHandler当提交任务数超过maximumPoolSize+workQueue之和时,任务会交给RejectedExecutionHandler来处理

常规八股直接说

2.5 你这个几个参数的值是怎么得来的呀?算出来的?怎么算出来的?

CPu密集corePoolSize = cpu核数+1

IO密集型 corePoolSize = cpu核数*2

2.6 线程池里面的任务是I0密集型的还是计算密集型的呢?好,现在我们有一个自定义线程池了,来说一下你这个线程池的工作流程呗?
 

  • 当线程池小于corePoolSize时,新提交的任务会创建一个新线程执行任务,即使线程池中仍有空闲线程。
  • 当线程池达到corePoolSize时,新提交的任务将被放在workQueue中,等待线程池中的任务执行完毕
  • 当workQueue满了,并且maximumPoolSize > corePoolSize时,新提交任务会创建新的线程执行任务
  • 当提交任务数超过maximumPoolSize,新任务就交给RejectedExecutionHandler来处理当线程池中超过 corePoolSize线程,空闲时间达到keepAliveTime时,关闭空闲线程
  • 当设置allowCoreThreadTimeOut(true)时,线程池中corePoolSize线程空闲时间达到keepAliveTime也将关闭

2.7 那你这个线程池满了怎么办呀?拒绝?咋拒绝?有哪些拒绝策略呢?

  • AbortPolicy,也是 ThreadPoolExecutor 的默认策略,在提交任务失败时直接抛出 RejectedExecutionException 异常;
  • CallerRunsPolicy,在任务被拒绝添加至线程池后,会调用当前线程池所在的线程去执行被拒绝的任务,但其缺点是会阻塞主线程;
  • DiscardOldestPolicy,在任务被拒绝添加值线程池后,会抛弃最早加入到队列(workQueue)的任务,再把这个新任务添加进去;
  • DiscardPolicy,在任务被拒绝添加至线程池后,任务会被直接丢弃,也不会抛出异常,是最不安全也不推荐的。

2.8  回到开始说的阿里巴巴java开发手册不允许使用默认实现,你回答说可能会引起OOM,那我们聊聊JVM吧

 

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

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

相关文章

期权的常见结构

期权收益图 期权的**收益(payoff)**是指期权到期日时的价值,**期权的损益(profit)**不但包含期权的收益,还包括期权交易开始时发生的期权费。 买入看涨期权 看涨期权买入方,当到期时标的资产…

【讲解下NLP学习路线的总结】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

嵌入式网络硬件方案

一. 简介 本文来了解一下嵌入式有些网络中,涉及的网络硬件方案。 注意:本文说明的是有些网络。 提起网络,我们一般想到的硬件就是“网卡”,“网卡”这个概念最早从电脑领域传出来,顾名思义就是能上网的卡。在电脑领…

牛客2024年愚人节比赛(A-K)

比赛链接 毕竟是娱乐场,放平心态打吧。。。 只有A一个考了数学期望,其他的基本都是acmer特有的脑筋急转弯,看个乐呵即可。 A 我是欧皇,赚到盆满钵满! 思路: 我们有 p 1 p_1 p1​ 的概率直接拿到一件实…

redis基础数据结构

文章目录 前言字符串常见命令内部编码使用场景1、缓存(Cache)功能2、计数3、共享Session4、限速 哈希命令内部编码使用场景存储结构化数据 列表命令内部编码使用场景1.阻塞消息队列模型2.文章列表3.微博 Timeline 集合命令内部编码使用场景1.给用户增加标…

图像处理环境配置opencv-python

下载python,配置pip使用清华源下载镜像: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 切换到python目录下,右击cmd,执行pip升级指令: python -m pip install --upgrade pip 下载opencv&#x…

Linux(CentOS7) 安装 Nginx

目录 下载 上传 解压 生成 Makefile 编译与安装 启动 nginx 创建软链接 常用命令 下载 官网地址: nginx: downloadhttps://nginx.org/en/download.html选择稳定版本,也可以指定需要的版本下载 上传 将下载好的 tar 包上传到 Linux 服务器…

第14届蓝桥杯C++B组省赛:串的熵|枚举、浮点数相等比较、log函数

题目链接&#xff1a; 2.01串的熵 - 蓝桥云课 (lanqiao.cn) 注意点&#xff1a; 1.C的log函数&#xff1a;有2&#xff0c;e&#xff08;log()以e为底&#xff09;&#xff0c;10为底的&#xff0c;没有现成的用换底公式&#xff1a; C 标准库 <cmath> 数学函数大全 - …

SpringMvc项目创建过程

1、新建空项目 名字和路径自定义&#xff0c;Maven项目&#xff0c;不建议勾选Add sample code 2、创建web模块 选中当前项目 修改路径&#xff0c;注意是在main包下 选择当前项目 3、编写pom.xml文件 在文件中加入以下内容&#xff0c;packaging标签表明了maven打包类型。 &…

【网站项目】贫困生管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

文献速递:机器学习 + 分子动力学 + 第一性原理计算 + 热力学性质(熔化温度 热导率 热膨胀系数)

分享一篇关于机器学习 分子动力学 第一性原理 热力学性质&#xff08;熔化温度 & 热导率 & 热膨胀系数&#xff09;的文章。 感谢论文的原作者&#xff01; 关键词&#xff1a; 1. Al−Li alloy 2. Neural network potential 3. Molecular dynamics 4. Thermal …

C语言 键盘输入与屏幕输出——数据的格式化屏幕输出

目录 顺序结构 C语言如何实现数据的输入和输出&#xff1f; 数据的格式化屏幕输出 printf&#xff08;&#xff09;格式字符 printf&#xff08;&#xff09;的格式修饰符 顺序结构 一般而言&#xff0c;顺序结构程序涉及如下三个基本操作&#xff1a; *输入数据 *处理数…

Linux_地址空间_进程控制_进程创建_进程终止_进程等待_进程替换_简易shell_4

文章目录 一、程序地址空间1.地址空间验证2.验证堆和栈的增长方向3.感知地址空间4.什么是地址空间 二、进程控制1.进程创建2.进程终止1、**关于终止的正确认识&#xff1a;**2、**关于终止常见做法**3、**关于终止&#xff0c;内核做了什么&#xff1f;** 3.进程等待1、为什么要…

【DETR系列目标检测算法代码精讲】01 DETR算法02 DETR算法数据预处理+图像增强+dataset代码精讲

今天这一节主要对DETR算法的数据预处理和数据增强部分的代码做逐行的精讲。 这一部分的代码主要的功能就是将COCO数据集中的原始图像和原始标注处理成能够输入到DETR网络中的图像和标注。 我首先采取任务流程逐行讲解的办法&#xff0c;然后再debug演示一下 准备 这个读取数…

<Linux> Linux环境开发工具

一、Linux软件包管理器 - yum 什么是软件包&#xff1a; 在Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好 , 做成软件包 ( 可以理解成 windows 上的安装程序) 放在一…

Transformer的前世今生 day12(Transformer的三个问题)

Transformer的Decoder为什么要用掩码&#xff08;Masked Self-Attention&#xff09; 机器翻译中&#xff1a;源语句&#xff08;我爱中国&#xff09;&#xff0c;目标语句&#xff08;I love China&#xff09; 为了解决训练阶段和测试阶段不匹配的问题&#xff1a; 在训练阶…

多传感器标定——概述

文章目录 一、前言二、内容记录 一、前言 是对自动驾驶之心多传感器标定课程内容的记录&#xff0c;也是对一些被老师简单略过问题的自主学习。第一章是概述&#xff0c;将内容以问题的形式记录&#xff0c;并结合课上内容以及自己的项目经验给出回答 二、内容记录 车上会安装…

如何使用route-detect在Web应用程序路由中扫描身份认证和授权漏洞

关于route-detect route-detect是一款功能强大的Web应用程序路由安全扫描工具&#xff0c;该工具可以帮助广大研究人员在Web应用程序路由中轻松识别和检测身份认证漏洞和授权漏洞。 Web应用程序HTTP路由中的身份认证&#xff08;authn&#xff09;和授权&#xff08;authz&…

实验04_OSPF&RIP选路实验

实验拓扑 IP地址规划 拓扑中的 IP 地址段采用&#xff1a;172.16.AB.X/24。其中 AB 为两台路由器编号组合&#xff0c;例如&#xff1a;R3-R6 之间的 AB 为 36&#xff0c;X 为路由器编号&#xff0c;例如R3 的 X3所有路由器都有一个 loopback 0 接口&#xff0c;地址格式为&…

代码随想录算法训练营第二十七天| LeetCode 39. 组合总和、40.组合总和II、131.分割回文串

一、39. 组合总和 题目链接/文章讲解/视频讲解&#xff1a; https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html 状态&#xff1a;已解决 1.思路 这道题跟216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09;题思路差不多&#xff0c;区别在于…