首页 > 基础资料 博客日记
【学习OR面试】请你介绍一下线程池(1)
2025-06-25 19:00:02基础资料围观13次
本篇文章分享【学习OR面试】请你介绍一下线程池(1),对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
推荐阅读:
https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
1.线程池是什么?
-
定义:工具
-
解决问题:在并发环境下,系统不能够确定在任意时刻中,有多少任务需要执行,有多少资源需要投入。
-
用途:管理和复用线程,减少线程的创建和销毁开销。
-
总结:线程池是用来管理和复用线程的工具,它可以减少线程的创建和销毁开销。
2.线程池的核心参数?
4+2+1=7
- 核心线程数、最大线程数、任务队列和拒绝策略
- 非核心线程的存活时间和参数单位(核心线程默认不会销毁)
- 线程工厂
3.线程池的工作流程?
任务提交 → 核心线程执行 → 任务队列缓存 → 非核心线程执行 → 拒绝策略处理。
if 正在运行的线程数<核心线程数:创建核心线程来执行
else if 正在运行的线程数>=核心线程数:放入等待队列
else if 等待队列满了&&正在运行的线程数<最大线程数:创建非核心线程来执行
else if 等待队列满了&&正在运行的线程数>=最大线程数:拒绝策略的执行
最后:线程执行完毕后,线程并不会立即销毁,而是继续保持,在池中等待下一个任务。
但是,当非核心线程空闲时间超出存活时间(当前线程数量大于核心线程数时),线程会被回收。
总结为5种情况
4.拒绝策略有哪些?
- AbortPolicy:默认的拒绝策略,会抛 RejectedExecutionException 异常。
- CallerRunsPolicy:让提交任务的线程自己来执行这个任务,也就是调用 execute 方法的线程。
- DiscardOldestPolicy:等待队列会丢弃队列中最老的一个任务,也就是队列中等待最久的任务,然后尝试重新提交被拒绝的任务。
- DiscardPolicy:丢弃被拒绝的任务,不做任何处理也不抛出异常。
【这个图精辟!】
5.线程池有哪几种阻塞队列?
五种。
- ArrayBlockingQueue:底层是数组,有界,先进先出,适合固定大小的线程池。
- LinkedBlockingQueue:底层是链表,无界(Integer.MAX_VALUE)。
- PriorityBlockingQueue:类比优先队列(堆实现),无界,可以排序。如其名:优先级高的先出。
- DelayQueue:类比PriorityBlockingQueue,带有延迟功能:元素在指定时间点之后才能取出。
- SynchronousQueue:同步队列,生产者放入元素必须等待消费者取走,否则阻塞。
文章来源:https://www.cnblogs.com/lazyGuai/p/18948605
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 一次HTTP请求
- 【学习OR面试】请你介绍一下线程池(1)
- springboot~hibernate实现外键表加载
- 华为 OD 的面试流程。。
- hot100之动态规划下
- 剑指offer-5、两个栈实现⼀个队列
- Spring Boot 使用 Tomcat 作为容器时访问根 context-path 302分析
- dynamic-datasource detect druid publicKey,It is highly recommended that you use the built-in encryption method
- 什么是ollama?如何安装ollama和应用
- JavaSE-08面向对象高级二