注意:如果你的任务执行的是IO操作或网络请求,有阻塞动作,那么把这类任务提交到线程池不能减少上下文切换次数,因而不能提高性能(这种情况要想提高性能需使用Java的NIO模型,今后会讲解)。
3. 线程池中的线程数、阻塞队列大小可以设置限制,从而避免系统负载超出范围,合理使用系统资源。这些限制主要是通过创建线程池的5个参数来控制的。
JDK为了让开发方便,提供了Executors工厂方法,预配置好这5个参数。
4. 线程池的corePoolSize和maximumPoolSize参数
corePoolSize和maximumPoolSize控制线程池中的worker线程个数。线程池刚创建出来的时候,线程池中的线程个数poolSize=0;当有任务提交进来,不管线程是否空闲,poolSize均增长,直到poolSize等于corePoolSize。
当poolSize >= corePoolSize之后,任务开始储存在队列中,当队列满了之后,线程池才会再创建线程。假设每个提交给线程池的任务的运行时间无限长,则线程数、corePoolSize、mamximuPoolSize、阻塞队列之间的关系如图所示。
可以通过调用prestartCoreThread方法或prestartAllCoreThreads提前让线程池提前创建好corePoolSize所指定数量的线程,而不是被动等待任务到来再创建core thread。
5. 线程池的ThreadFactory参数
线程池中的线程都是由一个ThreadFactory创建的,你可以自己指定一个,也可以使用默认的。如果需要修改worker线程的线程组、优先级、线程名称、daemon状态,我们才需要指定ThreadFactory。
6. 线程池的Keep Alive机制
学习分享,共勉
这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!
资料整理不易,读者朋友可以转发分享下!
Java核心知识体系笔记.pdf
中高级Java开发面试高频考点题笔记300道.pdf
架构进阶面试专题及架构学习笔记脑图
Java架构进阶学习视频分享
[外链图片转存中…(img-R82LerGU-1714365499800)]
Java架构进阶学习视频分享