• 1
  • 2
  • 3
  • 4
  • 5

高中生大学生毕业后必选职业路

线程池经典面试题整理和答案介绍!

再怎么慎重都不为过

免费咨询 >
相关IT课程
线程池经典面试题整理和答案介绍!
这些IT技术课程很火爆,你还在等什么?
怎么学好 学什么好 咋学快速
网络营销 以在线咨询为准 热招
HTML5定制班HTML5定制班热招 以在线咨询为准 热招
Python定制班Python定制班热招 以在线咨询为准 热招
软件测试就业班软件测试就业班热招 以在线咨询为准 热招
JAVA就业班JAVA就业班热招 以在线咨询为准 热招
UI设计定制班 以在线咨询为准 热招

全移动智能化教学设施

定义"高大上"

让你学习高薪技术专业轻松无忧快乐

  • Java开发工程师
  • PHP培训
  • web全栈工程师
  • 软件测试工程师
  • 人工智能培训
  • 云计算培训
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

线程池经典面试题整理和答案介绍!

你想不优秀,没门!

专业选择对了,努力才能不白费

大数据-线程池经典面试题整理和答案介绍!
UI培训-线程池经典面试题整理和答案介绍!
网络营销-线程池经典面试题整理和答案介绍!
直播带货-线程池经典面试题整理和答案介绍!
物联网-线程池经典面试题整理和答案介绍!

线程池经典面试题整理和答案介绍!


线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。

线程池是一种多线程处理形式,它是Java开发面试中的必考知识点,尤其是在一些大厂的求职面试中,线程池是对求职者考核的重点。为了帮助大家可以更好地通过面试,本文特地为大家整理了线程池经典面试题并附上了答案,下面一起来尝试着做一做吧!

面试题1:使用线程池有哪些好处?

答案:降低资源消耗,通过重复利用已创建的线程,降低线程创建和销毁造成的消耗;提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行;增加线程的可管理型,线程是稀缺资源,使用线程池可以进行统一分配,调优和监控。

面试题2:概述一下线程池的核心属性。

答案:

(1)线程工厂:用于创建工作线程的工厂。

(2)核心线程数:当线程池运行的线程少于 corePoolSize 时,将创建一个新线程来处理请求,即使其他工作线程处于空闲状态。

(3)队列:用于保留任务并移交给工作线程的阻塞队列。

(4)最大线程数:线程池允许开启的最大线程数。

(5)拒绝策略:往线程池添加任务时,将在下面两种情况触发拒绝策略:一是线程池运行状态不是 RUNNING;二是线程池已经达到最大线程数,并且阻塞队列已满时。

(6)保持存活时间:如果线程池当前线程数超过 corePoolSize,则多余的线程空闲时间超过 keepAliveTime 时会被终止。

面试题3:线程池有哪些状态?分别描述一下。

答案:

(1)RUNNING:接受新任务并处理排队的任务。

(2)SHUTDOWN:不接受新任务,但处理排队的任务。

(3)STOP:不接受新任务,不处理排队的任务,并中断正在进行的任务。

(4)TIDYING:所有任务都已终止,workerCount 为零,线程转换到 TIDYING 状态将运行 terminated() 钩子方法。

(5)TERMINATED:terminated() 已完成。

面试题4:线程池有哪些常见的阻塞队列?使用时要注意什么?

答案:

(1)ArrayBlockingQueue:基于数组结构的有界阻塞队列,按先进先出对元素进行排序。

(2)LinkedBlockingQueue:基于链表结构的有界/无界阻塞队列,按先进先出对元素进行排序,吞吐量通常高于 ArrayBlockingQueue。Executors.newFixedThreadPool 使用了该队列。

(3)SynchronousQueue:不是一个真正的队列,而是一种在线程之间移交的机制。要将一个元素放入 SynchronousQueue 中,必须有另一个线程正在等待接受这个元素。如果没有线程等待,并且线程池的当前大小小于最大值,那么线程池将创建一个线程,否则根据拒绝策略,这个任务将被拒绝。使用直接移交将更高效,因为任务会直接移交给执行它的线程,而不是被放在队列中,然后由工作线程从队列中提取任务。只有当线程池是无界的或者可以拒绝任务时,该队列才有实际价值。

(4)PriorityBlockingQueue:具有优先级的无界队列,按优先级对元素进行排序。元素的优先级是通过自然顺序或 Comparator 来定义的。

使用有界队列时,需要注意线程池满了后,被拒绝的任务如何处理。使用无界队列时,需要注意如果任务的提交速度大于线程池的处理速度,可能会导致内存溢出。

面试题5:终止线程池有哪些方式?

答案:

(1)shutdown:“温柔”的关闭线程池。不接受新任务,但是在关闭前会将之前提交的任务处理完毕。

(2)shutdownNow:“粗暴”的关闭线程池,也就是直接关闭线程池,通过 Thread#interrupt() 方法终止所有线程,不会等待之前提交的任务执行完毕。但是会返回队列中未处理的任务。

面试题6:在我们实际使用中,线程池的大小配置多少合适?

答案:要想合理的配置线程池大小,首先我们需要区分任务是计算密集型还是I/O密集型。对于计算密集型,设置 线程数 = CPU数 + 1,通常能实现最优的利用率。对于I/O密集型,网上常见的说法是设置 线程数 = CPU数 * 2 ,这个做法是可以的,但不是最优的。

在我们日常的开发中,我们的任务几乎是离不开I/O的,常见的网络I/O(RPC调用)、磁盘I/O(数据库操作),并且I/O的等待时间通常会占整个任务处理时间的很大一部分,在这种情况下,开启更多的线程可以让 CPU 得到更充分的使用,一个较合理的计算公式如下:

线程数 = CPU数 * CPU利用率 * (任务等待时间 / 任务计算时间 + 1)

例如我们有个定时任务,部署在4核的服务器上,该任务有100ms在计算,900ms在I/O等待,则线程数约为:4 * 1 * (1 + 900 / 100) = 40个。当然,具体我们还要结合实际的使用场景来考虑。

全国1000多家名企招聘

500家企业人才定制培养需求

想不就业,太难!

IT培训就业之一 IT培训就业之二 IT培训就业之三
学员最关心的就业问题
想学员之所想,解学员之所惑
我怎么样选择
合适的IT课程?

我怎么样选择合适的IT课程?-线程池经典面试题整理和答案介绍!

学了IT课程后
能保证就业吗?

学了IT课程后能保证就业吗?-线程池经典面试题整理和答案介绍!

学了IT后可以进
哪些企业?

学了IT后可以进哪些企业?-线程池经典面试题整理和答案介绍!

0基础
学什么专业更好?

0基础学什么专业更好?-线程池经典面试题整理和答案介绍!

IT培训网课程的
优势有哪些?

IT培训网课程的优势有哪些?-线程池经典面试题整理和答案介绍!

IT课程学费多少钱?

IT课程费多少钱?-线程池经典面试题整理和答案介绍!

版权所有:IT培训网 备案信息:中国优质IT培训网

课程免费咨询热线:13783581536