Java线程池

面试官让我说java线程池的原理
我感觉它的执行步骤就是原理啊(于是我就这么说了)(也不知道对不对)(面试官眉头紧锁)
线程池到底在考什么啊
全部评论
原理应该指的是 继承aqs的worker 存放worker的hashset 等待任务的阻塞队列 还有拒绝策略这些 线程池的主要构成成分吧
3 回复 分享
发布于 2023-06-12 16:45 四川
当涉及到线程池的原理时,我们可以结合以下几个关键元素和数据结构进行说明: 线程池的数据结构: ThreadPoolExecutor:这是 Java 中线程池的主要实现类。它继承自 AbstractExecutorService 类,实现了 ExecutorService 接口。ThreadPoolExecutor 内部维护了一个线程池的状态、线程池的核心线程池大小、最大线程池大小、任务队列等信息。 线程池的初始化: 在创建 ThreadPoolExecutor 实例时,会初始化一定数量的线程,这些线程处于等待任务的状态。 初始化时会创建一个线程池管理的工作队列,例如 ArrayBlockingQueue 或 LinkedBlockingQueue,用于存储提交的任务。 任务提交与执行: 当有任务需要执行时,可以通过调用 execute() 方法将任务提交给线程池。 execute() 方***将任务包装成一个 Worker 对象,并放入任务队列中。 线程池中的空闲线程会从任务队列中获取任务,并执行任务的 run() 方法。 线程调度: 线程池根据调度算法从任务队列中选择任务,并将其分配给空闲的线程执行。这个调度算法可以根据线程池的类型和配置进行调整,例如先进先出、优先级等。 当任务队列为空时,线程会等待新任务的到来。 饱和策略: 如果线程池中的线程已满并且任务队列已满,新提交的任务可能会触发饱和策略。饱和策略定义了当无法继续接受新任务时的处理方式,例如抛出异常、丢弃任务等。 线程回收: 如果线程池中的线程长时间处于空闲状态,超过一定的时间阈值,线程池可能会根据配置进行线程回收,以减少资源消耗。 以上是线程池的基本原理。在具体的实现中,Java 线程池使用了锁、条件变量等数据结构来实现线程的调度和任务的管理。这些数据结构确保了线程池的并发安全性和任务执行的顺序性。 通过使用线程池,我们可以有效地管理和重用线程,提高系统的性能和资源利用率。线程池在多线程编程中起着重要的作用,并成为了常见的并发编程模式。 From ChatGPT
2 回复 分享
发布于 2023-06-25 18:08 浙江
我也是她问我原理我就说执行流程😋
1 回复 分享
发布于 2023-06-13 20:37 山西

相关推荐

05-16 15:54
已编辑
重庆邮电大学 Java
内容研发部1.线程池的好处?2.怎么创建一个线程池3.线程池拒绝策略有哪些*4.由调用线程来执行的应用场景是什么5.怎么给线程池中的线程制定名字呢?6.你在平时工作中怎么来制定你的核心线程数和最大限程数7.如何验证你的制定方案确实有效?8.你的动态线程池中间件怎么去发现你的线程池呢9.redis的哈希槽怎么分布?CRC16校验后得到的是什么?*10.redis的一个abcd这个类型跟1234这个类型哪个占用空间大一些*11.JVM溢出的时候,我要存储他溢出那一刻的快照怎么做呢?12.什么是责任链模式?13.责任链模式怎么把每个节点串起来?具体怎么做?14.你项目里的责任链是写死的吗?我要改怎么办?15.mysql如何遍历千万数据的表?从第一条到最后一条,怎么遍历效率最高?具体的遍历方式?16.RocketMQ怎么实现事务消息?17.RocketMQ怎么实现一致性?算法:有20个任务,每个任务里面做的事情是:睡眠2秒后,打印Hello World。使用拥有20个线程的线程池来执行这些任务,需要通过拥有5个许可的信号量来控制执行的并发面试官应该是leader级别的,引导性还可以;不过对问题的对错看得比较重,我回答风格比较啰嗦,喜欢发散思维,偶尔能感觉得到他的不耐烦,加上被遮掩的背景和时不时打断我思路的背景音,面试体验2.5颗星(顺便说说这个面试官是真的很喜欢线程池)
查看18道真题和解析 腾讯音乐求职进展汇总
点赞 评论 收藏
分享
评论
6
41
分享

创作者周榜

更多
牛客网
牛客企业服务