线程池
2016-07-05 22:05
225 查看
1、线程池优点
1、降低资源消耗 降低线程的创建和销毁造成的消耗
2、提高响应速度 不需要先创建线程再运行
3、提高线程的可管理性 使用线程池可以统一分配,调优和监控。
2、线程池的流程
如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(这一个过程需要获取全局锁)
如果当前运行线程数等于或者多余corePoolSize,则加入到队列BlockQueue
如果无法加入到BlockQueue(队列已满),则创建新的线程来处理任务,(需要获取全局锁)
如果创建的线程将使得当前运行的线程数量大于MaximunPoolSize,任务将被拒绝,并调用非常重要的RejuectExecutionHandler.rejectExecution()方法
3、线程池的参数
corePoolSize,线程池的基本大小
runnableTaskQueue:用于保存等待执行的任务的阻塞队列,可以有以下选择
ArrayBlockingQueue
LinkedBlockingQueue
synchronousQueue
priorityBlockingQueue
maximumPoolSze:线程池最大数量
ThreadFacotry:用于设置创建线程的工厂
RejectedExecutionHandler:饱和策略
AbortPolicy(默认)
CallerRunPolicy(只用调用者所在的线程来运行任务)
DiscardOldestPolicy 丢弃一个任务
DiscardPolicy(不处理,丢弃掉)
自己实现RejectedExecutionHandler接口自定义策略(记录日志或者持久化存储不能处理的任务)
5. keepAliveTime:线程保持活动的时间
6.TimeUtil:线程保持活动的单位
4、向线程池提交任务
1、execute方法用于提交不需要返回值的任务
2、submit可以用于提交有返回值的任务。返回的是个future对象,可以通过future.get()来获得运行结果。
5、关闭线程池(中断)
1、shutdownNow() 将线程池状态设置为STOP,然后中断所有的线程,并返回等待执行任务的列表。
2、shundown 将线程池置为SHUTDOWN,然后中断没有正在执行任务的线程。
3、只要调用了上面两个的其中任何一个,isShutDown都会返回true。
4、如果执行中的任务也可以结束,使用shutdownnow()。
5、无法响应中断的线程无法停止
6、合理配置线程池
任务:CPU密集型任务,IO密集型任务和混合型任务
优先级不同的任务可以使用PriiorityQueue来处理。
7、线程池的监控
线程池提供了一些监控和统计API用于对线程池进行监控。
1、降低资源消耗 降低线程的创建和销毁造成的消耗
2、提高响应速度 不需要先创建线程再运行
3、提高线程的可管理性 使用线程池可以统一分配,调优和监控。
2、线程池的流程
如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(这一个过程需要获取全局锁)
如果当前运行线程数等于或者多余corePoolSize,则加入到队列BlockQueue
如果无法加入到BlockQueue(队列已满),则创建新的线程来处理任务,(需要获取全局锁)
如果创建的线程将使得当前运行的线程数量大于MaximunPoolSize,任务将被拒绝,并调用非常重要的RejuectExecutionHandler.rejectExecution()方法
3、线程池的参数
corePoolSize,线程池的基本大小
runnableTaskQueue:用于保存等待执行的任务的阻塞队列,可以有以下选择
ArrayBlockingQueue
LinkedBlockingQueue
synchronousQueue
priorityBlockingQueue
maximumPoolSze:线程池最大数量
ThreadFacotry:用于设置创建线程的工厂
RejectedExecutionHandler:饱和策略
AbortPolicy(默认)
CallerRunPolicy(只用调用者所在的线程来运行任务)
DiscardOldestPolicy 丢弃一个任务
DiscardPolicy(不处理,丢弃掉)
自己实现RejectedExecutionHandler接口自定义策略(记录日志或者持久化存储不能处理的任务)
5. keepAliveTime:线程保持活动的时间
6.TimeUtil:线程保持活动的单位
4、向线程池提交任务
1、execute方法用于提交不需要返回值的任务
2、submit可以用于提交有返回值的任务。返回的是个future对象,可以通过future.get()来获得运行结果。
5、关闭线程池(中断)
1、shutdownNow() 将线程池状态设置为STOP,然后中断所有的线程,并返回等待执行任务的列表。
2、shundown 将线程池置为SHUTDOWN,然后中断没有正在执行任务的线程。
3、只要调用了上面两个的其中任何一个,isShutDown都会返回true。
4、如果执行中的任务也可以结束,使用shutdownnow()。
5、无法响应中断的线程无法停止
6、合理配置线程池
任务:CPU密集型任务,IO密集型任务和混合型任务
优先级不同的任务可以使用PriiorityQueue来处理。
7、线程池的监控
线程池提供了一些监控和统计API用于对线程池进行监控。
相关文章推荐
- 改善SQL语句
- 利用js 判断浏览器类型
- 字符串分割
- Qt---多线程控制
- SCU2016-01 K找规律
- JDBC的数据库查询
- R 语言语法快速浏览
- ld: 6 duplicate symbols for architecture x86_64 clang: error: linker command的解决方法
- Python学习笔记7:Python字典和集合
- java 冒泡排序算法
- 第十一天打字
- 图算法5之1006
- 双链表基本操作
- Redis学习笔记(三)-数据类型之string类型
- 《深入理解Java集合框架》系列文章
- Unknown Source的出现及解决
- 二叉查找树
- Java的反射解析
- 编程练习--二维数组的查找
- Android中常用布局