- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
每特教育Java架构面试宝典V1.0余胜军QQ644064065微信yushengjun644
JUC相关面试题
谈谈什么是线程池
线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。
为什么要使用线程池
因为频繁的开启线程或者停止线程,线程需要从新被cpu从就绪到运行状态调度,需要发生
cpu的上下文切换,效率非常低。
你们哪些地方会使用到线程池
实际开发项目中禁止自己new线程。
必须使用线程池来维护和创建线程。
每特教育Java架构面试宝典V1.0余胜军QQ644064065微信yushengjun644
线程池有哪些作用
核心点:复用机制提前创建好固定的线程一直在运行状态实现复用限制线程创建数量。
1.降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。
2.提高响应速度:任务到达时,无需等待线程创建即可立即执行。
3.提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因
为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分
配、调优和监控。
4.提供更多更强大的功能:线程池具备可拓展性,允许开发人员向其中增加更多的功能。比
如延时定时线程池ScheduledThreadPoolExecutor,就允许任务延期执行或定期执行。
线程池的创建方式
Executors.newCachedThreadPool();可缓存线程池
Executors.newFixedThreadPool();可定长度限制最大线程数
Executors.newScheduledThreadPool();可定时
Executors.newSingleThreadExecutor();单例
底层都是基于ThreadPoolExecutor构造函数封装
线程池底层是如何实现复用的
本质思想:创建一个线程,不会立马停止或者销毁而是一直实现复用。
1.提前创建固定大小的线程一直保持在正在运行状态;(可能会非常消耗cpu的资源)
2.当需要线程执行任务,将该任务提交缓存在并发队列中;如果缓存队列满了,则会执行
拒绝策略;
3.正在运行的线程从并发队列中获取任务执行从而实现多线程复用问题;
每特教育Java架构面试宝典V1.0余胜军QQ644064065微信yushengjun644
线程池核心点:复用机制
1.提前创建好固定的线程一直在运行状态死循环实现
2.提交的线程任务缓存到一个并发队列集合中,交给我们正在运行的线程执行
3.正在运行的线程就从队列中获取该任务执行
简单模拟手写Java线程池:
publicclassMyExecutors{
publicBlockingDequeRunnablerunnables;
privatevolatileBooleanisRuntrue;
/**
*dequeSize缓存任务大小
*
*@paramdequeSize
*@paramthreadCount复用线程池
*/
publicMyExecutors(intdequeSize,intthreadCount){
runnablesnewLinkedBlockingDequeRunnable(dequeSize);
for(inti0;ithreadCount;i++){
WorkThreadworkThreadnewWorkThread();
workThread.start();
}
}
publicvoidexecute(Runnablerunnable){
runnables.offer(runnable);
}
每特教育Java架构面试宝典V1.0余胜军QQ644064065微信yushengjun644
classWorkThreadextendsThread{
文档评论(0)