市场竞争激烈,面对刁钻的面试官如何搞定他,Java有几种实现线程池的方式

2022-09-22 11:27:01 浏览数 (1)

‍一位工作3年工作经验的小伙伴面试时被问到,说,Java原生API中,提供了几种实现线程池的方式?当时他只回答了一种方式。屏幕前的你,是不是也能够完整地回答出来呢?

下面我给大家分享一下我的理解。

1 线程池的主要实现方式

ENTER TITLE

JDK默认提供了五种不同的线程池的实现方式,分别是CachedThreadPool可以缓存的线程池、FiexdThreadPool固定线程数量的线程池、SingleThreadExecutor只有一个工作线程的线程池、ScheduledThreadPool可定时调度的线程池、WorkStealingPool可并行处理的线程。

这些线程池,都是通过JDK中的工具类Executors来构建的,线程池内部的最终实现类是一个叫做ThreadPoolExecutor。

2 主要特征介绍

下面我分别介绍一下每种线程池实现方式的特点:

ENTER TITLE

第1种是:CachedThreadPool,是一种可以缓存的线程池,

ENTER TITLE

它可以用来处理大量短期的突发流量。它有以下三个特点:

1)对最大线程数没有限制,也就是说可以登记线程数可以达到Integer.MAX_VALUE

2) 线程存活时间是60秒

3)阻塞队列用的是SynchronousQueue,这是一种不能存储任何元素的阻塞队列,也就是没提交一个任务,到这个队列里面都需要分配一个工作线程来处理。

因为CachedThreadPool的最大线程数没有限制,所以它可以用来处理大量的任务。另外,每个工作线程有可以存活60秒,是的这些工作线程可以缓存起来,去应对更多的任务处理

ENTER TITLE

第2种是:FiexdThreadPool,是一种固定线程数量的线程池。

ENTER TITLE

它的特点就是:核心线程和最大线程数量都是一个固定的值。如果任务比较多工作线程处理不过来的情况下,就会加入到阻塞队列里面等待执行。

ENTER TITLE

第3种是:SingleThreadExecutor只有一个工作线程的线程池,

ENTER TITLE

并且线程数量无法动态更改,因此,可以保证所有的任务都按照FIFO先进先出的方式顺序执行。

ENTER TITLE

第4种是:ScheduledThreadPool,具有延迟执行功能的线程池,

ENTER TITLE

可以用它来实现定时调度。

ENTER TITLE

第5种是:WorkStealingPool,它是Java 8里面新加入的线程池,

ENTER TITLE

它会在内部构造一个ForkJoinPool,利用工作窃取的算法并行处理请求。

好了,以上就是我对Java线程池的理解。

另外,5/6/7月份资料文档已打包,包含如下↓(还在持续更新中!):

①100道最新大厂经典面试题解析资料文档!

②20万 字Java面试题解析和配套答案!

③从应届生到高级开发都使适用的简历模板!

④从入门到精通的架构师学习路线图!

0 人点赞