面试20K的职位必须要熟悉的Java线程池面试题!

本文详细介绍了Java线程池的构造、运行原理及其可能导致内存飙升的原因。通过分析线程池的工作流程,强调了无界队列在特定情况下可能造成任务堆积和内存使用急剧上升,从而引发JVM OOM问题。文章还指出,理解线程池的核心参数如corePoolSize、maximumPoolSize和workQueue对于避免此类问题至关重要。
摘要由CSDN通过智能技术生成
V-xin:ruyuanhadeng获得600+页原创精品文章汇总PDF

目录

  • 一、背景引入
  • 二、线程池是如何构造的?
  • 三、线程池的运行原理
  • 四、无界队列引发的内存飙升

一、背景引入

今天跟大家聊一个互联网大厂的Java面试题:使用无界队列的线程池会导致内存飙升吗

因为在面互联网大厂的时候,一定会问并发,问并发的时候一定会问到线程池,问到线程池一定会问构造线程池的一些参数的含义。

然后,有一些面试官会就线程池的具体场景,问一些可能会遇到的问题。

所以,在这里就可能有上述那样一个面试中的问题,算是Java面试里相对来说高阶一点的。


我相信大家一定起码知道线程池是个什么东西的。简单来说,就是维护一个池子,池子里面放了很多的线程。

然后来一个任务,某个线程就获取这个任务来执行,任务执行完之后线程是不会释放掉的,而是停留在线程池里继续等待下一个任务。

这样的一个好处是你没必要自己手动频繁的创建和销毁线程,毕竟线程是较重的资源,频繁的创建和销毁对系统性能是没好处的。

我们看看下面的图,回顾一下线程池的含义。

在这里插入图片描述

二、线程池是如何构造的?

那么平时在Java里写代码的时候,大家记得不记得线程池是如何构造出来的呢?

是不是类似下面那样的代码,比如说我们构造一个线程数量固定的一个线程池:

在这里插入图片描述

那么Executors.newFixedThreadPool(10)内部到底又是如何构造出来线程池的呢?

其实很简单,翻开JDK源码就可以看到里面的代码如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值