首页 > 应用开发 > Java > 多线程之线程池ThreadPoolExecutor
并发编程的艺术
码出高效java开发手册
RUNNING:能接受新任务,并处理阻塞队列中的任务SHUTDOWN:不接受新任务,但是可以处理阻塞队列中的任务STOP:不接受新任务,并且不处理阻塞队列中的任务,并且还打断正在运行任务的线程,就是直接撂担子不干了!TIDYING:所有任务都终止,并且工作线程也为0,处于关闭之前的状态TERMINATED:已关闭。
corePoolSize - 常驻核心线程数,即使空闲时仍保留在池中的线程数,除非设置 allowCoreThreadTimeOut
maximumPoolSize - 池中允许的最大线程数 。必须大于或等于1,如果等于
corePoolSize那就是固定大小线程池。队列缓存达到上限后,如果还有新任务需要处理,线程池就会创建新的线程。
keepAliveTime - 表示线程池中线程的空闲时间,当空闲时间达到这个值,线程会被销毁,知道只剩下
corePoolSize个线程为止,避免浪费内存和句柄资源
unit - keepAliveTime-参数的时间单位
workQueue - 用于在执行任务之前使用的队列。 这个队列将仅保存
execute 方法提交的
Runnable 任务。当请求线程数大于核心线程数时,线程进入 BlockingQueue 阻塞队列。建议使用有界队列,可以增加系统的稳定性和预警能力
threadFactory - 用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字
handler - 饱和策略,执行被阻止时使用的处理程序,因为达到线程限制和队列容量,也是一种简单的限流保护
AbortPolicy:直接抛出异常(默认情况)CallerRunsPolicy:只用调用者所在线程来运行任务DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务DiscardPolicy:不处理,丢弃掉线程工厂(顺便包含了任务的线程实现类)
拒绝策略(看起来很敷衍的样子)
线程池主方法(池子1出发了拒绝策略,池子2却没有,因为队列2足够强大,看来哪里都是靠实力说话)
根据任务特性来分角度分析
性质:
一直想整理出一份完美的面试宝典,但是时间上一直腾不开,这套 一千多道面试题宝典,结合今年金三银四各种大厂面试题,以及 GitHub 上 star 数超 30K+ 的文档整理出来的,我上传以后,毫无意外的短短半个小时点赞量就达到了 13k,说实话还是有点不可思议的。
需要完整版的小伙伴,可以一键三连后, 点击这里!
内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈(485页)
内容涵盖:Java基础、JVM、高并发、多线程、分布式、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、数据库、云计算等
由于篇幅限制,详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
需要完整版的小伙伴,可以一键三连后, 点击这里!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000428/viewspace-2788154/ ,如需转载,请注明出处,否则将追究法律责任。