这不是面经系列之聊聊线程池

本文详细探讨了Java线程池的基本概念、核心流程、关键细节及四种类型的线程池配置,包括线程池的状态流转、参数配置以及四种线程池(SingleThreadPool, CachedThreadPool, FixedThreadPool, ScheduledThreadPool)的应用场景。同时,分析了任务提交、工作线程创建和工作流程,以及线程池设计中的代码细节。文章最后提到了线程池在面试中的重要性和实际应用中的注意事项。" 9204995,1441098,面向对象技术与软件工程实践,"['面向对象编程', '软件工程', '设计模式', 'UML建模', '重构']
摘要由CSDN通过智能技术生成

三个问题

  1. 基本概念
  2. 核心流程
  3. 关键细节

如何解答

  1. 首先你要能掌握这三个问题,掌握了这三个问题,那么剩下的就是语言表达了
  2. 语言表达非常重要,会,但是说不明白,那很容易让面试官觉得你不会,那他就会一直在这里问你,保不齐就会出现你遗漏的一些东西被他问道。不是说掌握了三个知识就是100%掌握,而是 80% 掌握,Java官方的很多代码细节都是值得思考借鉴的,但是,时间精力有限对吧,所以抓重点,然后说明白。个人认为达到这个程度,这个线程池这个知识点面试基本就没有问题了。以下是我对线程池知识以及话术的总结
  3. 描述流程要 总分总,千万不要被动等提问,这个我以后会专门总结一下技术人员的面试技巧

开始聊

基本概念

线程池是管理一组同构工作线程的资源池。通过其内部维护的工作线程集合以及任务队列来优化服务器对线程的使用。线程池有三个使用优点

  1. 通过线程重用,减少大量线程创建,销毁时的系统资源消耗。同时能提高线程任务的响应速度
  2. 便于管理,避免了各自独立创建线程可能会导致的系统内存耗尽等情况。
  3. 稳定性可以有效提升,通过使用线程池,可以对线程池进行调优,监控,日志记录,错误报警等功能

为了方便开发者使用,Java类库内置了四类线程池,分别时SingleThreadPool,CachedThreadPool,FixedThreadPool以及ScheduledThreadPool。其中前三种本质都是ThreadPoolExecutor。ScheduledThreadPool为ThreadPoolExecutor的子类ScheduledThreadPoolExecutor单独实现的。

线程池有五种状态

  1. RUNNING:运行中,能接受任务也能处理任务
  2. SHUTDOWN:关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保存的任务。在线程池处于 RUNNING 状态时,调用 shutdown()方法会使线程池进入到该状态。(finalize() 方法在执行过程中也会调用shutdown()方法进入该状态);
  3. STOP:不能接受新任务,也不处理队列中的任务,会中断正在处理任务的线程。在线程池处于 RUNNING 或 SHUTDOWN 状态时,调用 shutdownNow() 方法会使线程池进入到该状态;
  4. TIDYING:如果所有的任务都已终止了,workerCount (有效线程数) 为0,线程池进入该状态后会调用 terminated() 方法进入TERMINATED 状态。
  5. TERMINATED:在terminated() 方法执行完后进入该状态,默认terminated()方法中什么也没有做。
    进入TERMINATED的条件如下:
    1. 线程池不是RUNNING状态;
    2. 线程池状态不是TIDYING状态或TERMINATED状态;
    3. 如果线程池状态是SHUTDOWN并且workerQueue为空;
    4. workerCount为0;
    5. 设置TIDYING状态成功。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值