【Java面试】说说你对线程池的理解

简介: 【Java面试】说说你对线程池的理解

为什么要用线程池?

在Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建

新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在处理实际的用户

请求的时间和资源要多得多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果

在一个JVM里创建太多的线程,可能会导致系统由于过度消耗内存或“切换过度”而导致系统资源不足。为

了防止资源不足,服务器应用程序需要一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建

和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务,

这就是 “池化资源” 技术产生的原因。

线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重用线程,线程创建的开

销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延

迟。这样,就可以立即为请求服务,使应用程序响应更快。另外,通过适当地调整线程池中的线程数目

可以防止出现资源不足的情况。

线程池结构的简单介绍

一个比较简单的线程池至少应包含:线程池管理器、工作线程、任务队列、任务接口等部分 。其中线程池

管理器(ThreadPool Manager)的作用是创建、销毁并管理线程池,将工作线程放入线程池中;工作

线程是一个可以循环执行任务的线程,在没有任务时进行等待;任务队列的作用是提供一种缓冲机制,

将没有处理的任务放在任务队列中;任务接口是每个任务必须实现的接口,主要用来规定任务的入口、

任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行。

线程池适合使用的场景

当一个Web服务器接受到大量短小线程的请求时,使用线程池技术是非常合适的,它可以大大减少线程

的创建和销毁次数,提高服务器的工作效率。但如果线程要求的运行时间比较长,此时线程的运行时间

比创建时间要长得多,单靠减少创建时间对系统效率的提高不明显,此时就不适合应用线程池技术,需

要借助其它的技术来提高服务器的服务效率。

使用线程池的风险

虽然线程池是构建多线程应用程序的强大机制,但使用它并不是没有风险的。用线程池构建的应用程序

容易遭受任何其它多线程应用程序容易遭受的所有并发风险,诸如同步错误和死锁,它还容易遭受特定

于线程池的少数其它风险,诸如与池有关的死锁、资源不足和线程泄漏。

什么是死锁

总回答

线程池它是一种池化技术,他利用的是资源复用的思想。比较常见的池化技术有:线程池、连接池、内存池、对象池等。线程池复用的就是线程资源,由于是线程资源,因此线程池的核心设计目标是为了减少频繁的去创建或者销毁线程对象所带来的一些性能开销。原因是因为线程在创建过程中会涉及到CPU的上下文切换,从用户态到内核态的状态交换,内存再分配等工作,这些工作都是比较消耗性能的。并且使用线程池可以通过设置参数来控制线程池中线程创建的数量,这样子能避免由于过量创建线程对象带来的一些资源利用过高的问题,从而起到了保护资源的效果。

其实答完上面就差不多了,但是一般问这个问题下一个问题都是,你对线程池核心参数的了解,所以这里也简答一下我的理解。

对于线程池,我们主要使用的就是两个参数,一个是核心线程数,另一个是最大总线程数。

这个核心线程数就是默认的长期在工作的这种工作线程,他是不会被销毁的,长期的存留在线程池中的。

而最大线程数其实是动态的,他是线程池在执行任务的过程中,动态创建的线程,因为对于线程池,不能由核心线程处理的任务将会被放到阻塞队列中,因此这个最大线程数主要是为了阻塞队列里面的任务的处理的数量和效率。


相关文章
|
22小时前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
22小时前
|
存储 网络协议 前端开发
es集群安装,邮储银行java面试
es集群安装,邮储银行java面试
|
22小时前
|
消息中间件 JSON Java
十五,java高级程序员面试宝典
十五,java高级程序员面试宝典
|
22小时前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
22小时前
|
消息中间件 Java Kafka
Java大文件排序(有手就能学会),kafka面试题2024
Java大文件排序(有手就能学会),kafka面试题2024
SpringJDK动态代理实现,2024Java面试真题精选干货整理
SpringJDK动态代理实现,2024Java面试真题精选干货整理
|
1天前
|
安全 前端开发 Java
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15
|
1天前
|
Java
阅读《代码整洁之道》总结(1),java多线程面试
阅读《代码整洁之道》总结(1),java多线程面试
|
1天前
|
NoSQL Java 关系型数据库
爱了!阿里高工纯手打金三银四Java架构面试大全,涵盖近年来1000余道大厂面试真题
爱了!阿里高工纯手打金三银四Java架构面试大全,涵盖近年来1000余道大厂面试真题
|
2天前
|
存储 Java
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?
44 23