万字长文详解Java线程池面试题

2023年 10月 9日 50.5k 0

王有志,一个分享硬核 Java 技术的互金摸鱼侠加入 Java 人的提桶跑路群:共同富裕的Java人

今天是《面霸的自我修养》第 6 篇文章,我们一起来看看面试中会问到哪些关于线程池的问题吧。

数据来源:

  • 大部分来自于各机构(Java 之父,Java 继父,某灵,某泡,某客)以及各博主整理文档;
  • 小部分来自于我以及身边朋友的实际经理,题目上会做出标识,并注明面试公司。

叠“BUFF”:

  • 八股文通常出现在面试的第一二轮,是“敲门砖”,但仅仅掌握八股文并不能帮助你拿下 Offer;
  • 由于本人水平有限,文中难免出现错误,还请大家以批评指正为主,尽量不要喷~~

线程池是什么?为什么要使用线程池?

难易程度:🔥🔥

重要程度:🔥🔥🔥🔥🔥

面试公司:无

计算机中,线程的创建和销毁开销较大,频繁的创建和销毁线程会影响程序性能。利用基于池化思想的线程池来统一管理和分配线程,复用已创建的线程,避免频繁创建和销毁线程带来的资源消耗,提高系统资源的利用率。

线程池具有以下 3 点优势:

  • 降低资源消耗,重复利用已经创建的线程,避免线程创建与销毁带来的资源消耗;
  • 提高响应速度,接收任务时,可以通过线程池直接获取线程,避免了创建线程带来的时间消耗;
  • 便于管理线程,统一管理和分配线程,避免无限制创建线程,另外可以引入线程监控机制。

Java 中如何创建线程池?

难易程度:🔥🔥

重要程度:🔥🔥🔥🔥

面试公司:无

Java 中可以通过 ThreadPoolExecutor 和 Executors 创建线程池。

使用 ThreadPoolExecutor 创建线程池

使用 ThreadPoolExecutor 可以创建自定义线程池,例如:

ExecutorService threadPoolExecutor = new ThreadPoolExecutor(
	10, 
	20, 
	10, 
	TimeUnit.MILLISECONDS, 
	new LinkedBlockingQueue(),
	new ThreadPoolExecutor.AbortPolicy()
);

了解以上代码的含义前,我们先来看 ThreadPoolExecutor 提供的的构造方法:

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler);
}

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, defaultHandler);
}

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, RejectedExecutionHandler handler) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), handler);
}

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) {
if (corePoolSize < 0 || maximumPoolSize

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论