【理解】线程池基本概念
【理解】线程池工作原理
【掌握】自定义线程池
【应用】java内置线程池
【应用】使用java内置线程池完成综合案例
- 线程池基础
- 线程池使用
- 线程池综合案例
- 学员练习
- 线程池总结
- 什么是线程池
- 为什么使用线程池
- 线程池有哪些优势
什么是池

线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象;
使用线程池最大的原因就是可以根据系统的需求和硬件环境灵活的控制线程的数量,且可以对所有线程进行统一的管理和控制,从而提高系统的运行效率,降低系统运行运行压力;当然了,使用线程池的原因不仅仅只有这些,我们可以从线程池自身的优点上来进一步了解线程池的好处;
- 线程和任务分离,提升线程重用性;
- 控制线程并发数量,降低服务器压力,统一管理所有线程;
- 提升系统响应速度,假如创建线程用的时间为T1,执行任务用的时间为T2,销毁线程用的时间为T3,那么使用线程池就免去了T1和T3的时间;
应用场景介绍
1. 网购商品秒杀
2. 云盘文件上传和下载
3. 12306网上购票系统等
总之
只要有并发的地方、任务数量大或小、每个任务执行时间长或短的都可以使用线程池;
只不过在使用线程池的时候,注意一下设置合理的线程池大小即可;(关于如何合理设置线程池大小在后面的章节中讲解)
java内置线程池
自定义线程池
异步计算结果(Future)
我们要想自定义线程池,必须先了解线程池的工作原理,才能自己定义线程池;
这里我们通过观察java中ThreadPoolExecutor的源码来学习线程池的原理;
(源码演示在idea中查看)

通过观察Java中的内置线程池参数讲解和线程池工作流程总结,我们不难发现,要设计一个好的线程池,就必须合理的设置线程池的4个参数;那到底该如何合理的设计4个参数的值呢?我们一起往下看.
1:核心线程数(corePoolSize)
核心线程数的设计需要依据任务的处理时间和每秒产生的任务数量来确定,例如:执行一个任务需要0.1秒,系统百分之80的时间每秒都会产生100个任务,那么要想在1秒内处理完这100个任务,就需要10个线程,此时我们就可以设计核心线程数为10;当然实际情况不可能这么平均,所以我们一般按照8020原则设计即可,既按照百分之80的情况设计核心线程数,剩下的百分之20可以利用最大线程数处理;
2:任务队列长度(workQueue)
任务队列长度一般设计为:核心线程数/单个任务执行时间*2即可;例如上面的场景中,核心线程数设计为10,单个任务执行时间为0.1秒,则队列长度可以设计为200;
3:最大线程数(maximumPoolSize)
最大线程数的设计除了需要参照核心线程数的条件外,还需要参照系统每秒产生的最大任务数决定:例如:上述环境中,如果系统每秒最大产生的任务是1000个,那么,最大线程数=(最大任务数-任务队列长度)*单个任务执行时间;既: 最大线程数=(1000-200)*0.1=80个;
4:最大空闲时间(keepAliveTime)
这个参数的设计完全参考系统运行环境和硬件压力设定,没有固定的参考值,用户可以根据经验和系统产生任务的时间间隔合理设置一个值即可;



ScheduledExecutorService是ExecutorService的子接口,具备了延迟运行或定期执行任务的能力,

序列号内容链接1Java基础知识面试题(2022版)https://blog.csdn.net/_/article/details/Java集合容器面试题(2022版)https://blog.csdn.net/_/article/details/Java异常面试题(2022版)https://blog.csdn.net/_/article/details/并发编程面试题 (2022版)https://blog.csdn.net/_/article/details/JVM面试题(2022版)https://blog.csdn.net/_/article/details/Spring面试题(2022版)https://blog.csdn.net/_/article/details/Spring MVC面试题(2022版)https://blog.csdn.net/_/article/details/Spring Boot面试题(2022版)https://blog.csdn.net/_/article/details/Spring Cloud面试题(2022版)https://blog.csdn.net/_/article/details/MyBatis面试题(2022版)https://blog.csdn.net/_/article/details/Redis面试题(2022版)https://blog.csdn.net/_/article/details/MySQL数据库面试题(2022版)https://blog.csdn.net/_/article/details/消息中间件MQ知识点(2022版)https://blog.csdn.net/_/article/details/ZooKeeper面试题(2022版)https://blog.csdn.net/_/article/details/架构设计&分布式&数据结构与算法面试题(2022版)https://blog.csdn.net/_/article/details/计算机网络编程面试题(2022版)https://blog.csdn.net/_/article/details/
序列号内容链接1Mysql深入优化 (一) ----- 索引、视图、存储过程、触发器https://blog.csdn.net/_/article/details/Mysql深入优化 (二) ----- 体系结构、存储引擎、SQL优化https://blog.csdn.net/_/article/details/Mysql深入优化 (三) ----- 查询缓存、内存管理及优化、MySQL锁问题https://blog.csdn.net/_/article/details/Mysql深入优化 (四) ----- MySQL常用工具、日志、主从复制、综合案例https://blog.csdn.net/_/article/details/
序列号内容链接1大数据知识面试题-通用(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Hadoop(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-MapReduce和yarn(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Zookeepr (2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Hive (2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Flume(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Hbase(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-sqoop(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Kafka(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Azkaban(2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Scala (2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Spark (2022版)https://blog.csdn.net/_/article/details/大数据知识面试题-Flink(2022版)https://blog.csdn.net/_/article/details/
序列号内容链接1前端知识面试题 - http&https(2022版)https://blog.csdn.net/_/article/details/前端知识面试题 - 浏览器(2022版)https://blog.csdn.net/_/article/details/前端知识面试题 - HTML && CSS(2022版)https://blog.csdn.net/_/article/details/.1前端知识面试题 - JavaScript(2022版)https://blog.csdn.net/_/article/details/.2前端知识面试题 - JavaScript(2022版)https://blog.csdn.net/_/article/details/前端知识面试题 - TypeScript (2022版)https://blog.csdn.net/_/article/details/.1前端知识面试题 - Vue&&VueJs(2022版)https://blog.csdn.net/_/article/details/.2前端知识面试题 - Vue&&VueJs(2022版)https://blog.csdn.net/_/article/details/前端知识面试题 - React(2022版)https://blog.csdn.net/_/article/details/前端知识面试题 - nodeJs(2022版)https://blog.csdn.net/_/article/details/前端知识面试题 - Augluar(2022版)https://blog.csdn.net/_/article/details/
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/13186.html