| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 一个demo让你彻底理解线程池工作流程 -> 正文阅读 |
|
[Java知识库]一个demo让你彻底理解线程池工作流程 |
网上关于线程池的八股文太多了我不多说,说了你也记不住,记住了也理解不了,理解了也不会用… 想了很久,终于想出一个demo,加上十个场景,让你能逐步理解线程池真正的工作流程 相信我,认真看完这篇文章,你能彻底掌握一个Java核心知识点,不亏线程池无非就那几个参数:核心线程、最大线程、回收时间、队列,没啥难的,有手就能学废 我这里直接上demo,不知道参数啥意思的可以先去隔壁补补课,虽然本文也会提到,但你最好先大概知道点,线程池实现运行机制总结 上才艺
重点来了,我们带着问题来看demo 如上,new了个线程池,core线程数10,最大线程数20,任务队列容量30,请听题!! 问题0:往上述线程池中提交5个任务,任务执行完总耗时多少?
问题1:提交10个任务,总耗时多少?
问题2:提交11个任务,总耗时多少?
问题3:提交20个任务,总耗时多少?
问题4:提交30个任务,总耗时多少?
问题5:提交40个任务,总耗时多少?
重点来了!! 问题6:提交41个任务,总耗时多少?
问题7:提交45个任务,总耗时多少?
问题8:提交50个任务,总耗时多少?
最后来说刚才的遗留问题,为啥41个任务2000,45个任务就1500?? 其实很多人没把这个搞懂的,后面几个问题我都写了个一串加号(这个搞懂,线程池你就算掌握了) 如40个任务时,10+10+10+10,这代表所有任务分4组完成,每组执行10个,因为多线程是异步,所以每组执行时间就等于单个任务执行时间,即500ms,所以40个任务就是500+500+500+500=2000 而41个任务时,是11+11+11+8,所以40个任务也是500+500+500+500=2000(肯定会有小伙伴问,41个任务已经超出了队列容量,线程池中线程为啥没达到最大线程数,应该是20+20+1才对啊) 记住一句话 所以 再来继续看 41个任务时,41-30=11,执行批次为11+11+11+8,即500+500+500+500=2000,有问题吗?没有问题 45个任务时,45-30=15,所以15+15+15,即500+500+500=1500,有问题吗?没有问题 50个任务时,50-30=20,20+20+10,即500+500+500=1500,有问题吗?依然没有问题 课后留个问题,44个任务耗时多少? 希望你自己去跑一下,别不识抬举 文末补充个冷知识,核心线程数也可以被回收,ThreadPoolExecutor有个属性叫 allowCoreThreadTimeOut 博客是今天写的 demo是昨天想的 头发是前天想demo时掉的 这是我好几根头发换来的demo,老板见了都要激动的拍打轮椅,家里有条件的都把demo复制下来跑一跑,没条件的朗诵并背诵全文 完结 ok我话说完 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:24:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |