V-xin:ruyuanhadeng获得600+页原创精品文章汇总PDF
目录
- 一、背景引入
- 二、线程池是如何构造的?
- 三、线程池的运行原理
- 四、无界队列引发的内存飙升
一、背景引入
今天跟大家聊一个互联网大厂的Java面试题:使用无界队列的线程池会导致内存飙升吗?
因为在面互联网大厂的时候,一定会问并发,问并发的时候一定会问到线程池,问到线程池一定会问构造线程池的一些参数的含义。
然后,有一些面试官会就线程池的具体场景,问一些可能会遇到的问题。
所以,在这里就可能有上述那样一个面试中的问题,算是Java面试里相对来说高阶一点的。
我相信大家一定起码知道线程池是个什么东西的。简单来说,就是维护一个池子,池子里面放了很多的线程。
然后来一个任务,某个线程就获取这个任务来执行,任务执行完之后线程是不会释放掉的,而是停留在线程池里继续等待下一个任务。
这样的一个好处是你没必要自己手动频繁的创建和销毁线程,毕竟线程是较重的资源,频繁的创建和销毁对系统性能是没好处的。
我们看看下面的图,回顾一下线程池的含义。
二、线程池是如何构造的?
那么平时在Java里写代码的时候,大家记得不记得线程池是如何构造出来的呢?
是不是类似下面那样的代码,比如说我们构造一个线程数量固定的一个线程池:
那么Executors.newFixedThreadPool(10)内部到底又是如何构造出来线程池的呢?
其实很简单,翻开JDK源码就可以看到里面的代码如下: