博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThreadPoolExecutor详解
阅读量:6325 次
发布时间:2019-06-22

本文共 1081 字,大约阅读时间需要 3 分钟。

线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:

 

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,

long keepAliveTime, TimeUnit unit,

BlockingQueue<Runnable> workQueue,

RejectedExecutionHandler handler)

 

 

corePoolSize: 线程池维护线程的最少数量

maximumPoolSize:线程池维护线程的最大数量

keepAliveTime: 线程池维护线程所允许的空闲时间

unit: 线程池维护线程所允许的空闲时间的单位

workQueue: 线程池所使用的缓冲队列

handler: 线程池对拒绝任务的处理策略

 

一个任务通过 execute(Runnable)方法被添加到线程池,任务就是一个 Runnable类型的对象,任务的执行方法就是Runnable类型对象的run()方法。

 

当一个任务通过execute(Runnable)方法欲添加到线程池时:

 

l  如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。

l  如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。

l  如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。

l  如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。

l  当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

 

 

 

线程池的shutdownNow方法也不一定会终止所有线程,因为他调用的是thread.interrupt()方法,而改方法只能中断处于阻塞状态的线程,也就是说线程一直处于运行状态的话,他是无法被该方法中断的。

转载地址:http://sbmaa.baihongyu.com/

你可能感兴趣的文章
挂羊头卖狗肉蓄意欺骗读者——谭浩强《C程序设计(第四版)》中所谓的“按照C99”(一)...
查看>>
Java Split以竖线作为分隔符
查看>>
编程习惯
查看>>
Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File
查看>>
Mysql log_slave_updates 参数
查看>>
模式识别 - 处理多个演示样本研究(MIL)特点(matlab)
查看>>
lintcode :Remove Duplicates from Sorted Array II 删除排序数组中的重复数字 II
查看>>
CSS 简介
查看>>
atitit.短信 验证码 破解 v3 p34 识别 绕过 系统方案规划----业务相关方案 手机验证码 .doc...
查看>>
C# TextBox常用方法总结
查看>>
[android] 调用系统照相机和摄像机
查看>>
JDBC数据库编程常用接口(转)
查看>>
解析js中( ( ) { } ( ) )的含义
查看>>
劈荆斩棘:Gitlab 部署 CI 持续集成
查看>>
Mongodb后台daemon方式启动
查看>>
cp显示进度条
查看>>
Hadoop RPC
查看>>
SuperSpider——打造功能强大的爬虫利器
查看>>
MySql状态查看方法 MySql如何查看连接数和状态?
查看>>
memcached 安装
查看>>