线程池原理以及相关概念(读书笔记)
java中的线程池
合理使用线程池的好处
1降低系统资源消耗
2提高响应速度
3提高线程的可管理性
线程池实现原理
当向线程池提交一个任务后
线程池判断是否核心线程都在执行任务。如果不是,则新建一个新的工作线程来执行任务。
如果核心线程里都在执行任务,则进入下一个流程
2线程池判断工作队列是否已满,如果工作队列没有满,则将新的任务存储在这个工作队列,如果工作队列已满,
则进入下一个流程
3线程池判断线程是否都处于工作状态。如果没有,则新建一个工作线程。如果已经满了,则交给饱和策略来处理这个
任务。
ThreadPoolExecutor执行excute方法分下面4种情况
new ThreadPoolexector
创建一个线程池需要几个参数
1corePoolsize
2.runnableTaskQueue
3.maxmumPoolSize
4.ThreadFactory
5.饱和策略
6keepAlivetime
7.TimeUnit
向线程池提交任务
execute()和submit()方法
execute没有返回值
submit有返回值 futureget方法直到阻塞当前任务完成
关闭线程池
shutdown和shutdownnow方法来关闭。原理遍历线程,然后逐个interrupt方法中断线程,shutdownnow首先将
线程设置成stop然后停止或者暂停任务的线程,并返回等待执行的任务的列表。
而shutdown只是将线程设置shutdown状态,然后中断所有没有在执行任务的线程
合理配置线程池
任务性质:cpu密集型,io和混合任务
任务的优先级
任务执行时间
任务的依赖性
线程池的监控
taskCount:线程池需要执行任务的数量
completedTaskCount:线程池执行过程已完成的最大数量
合理使用线程池的好处
1降低系统资源消耗
2提高响应速度
3提高线程的可管理性
线程池实现原理
当向线程池提交一个任务后
线程池判断是否核心线程都在执行任务。如果不是,则新建一个新的工作线程来执行任务。
如果核心线程里都在执行任务,则进入下一个流程
2线程池判断工作队列是否已满,如果工作队列没有满,则将新的任务存储在这个工作队列,如果工作队列已满,
则进入下一个流程
3线程池判断线程是否都处于工作状态。如果没有,则新建一个工作线程。如果已经满了,则交给饱和策略来处理这个
任务。
ThreadPoolExecutor执行excute方法分下面4种情况
(首先核心线程---》然后工作队列====》最大线程数====》饱和策略)
new ThreadPoolexector
创建一个线程池需要几个参数
1corePoolsize
2.runnableTaskQueue
3.maxmumPoolSize
4.ThreadFactory
5.饱和策略
6keepAlivetime
7.TimeUnit
向线程池提交任务
execute()和submit()方法
execute没有返回值
submit有返回值 futureget方法直到阻塞当前任务完成
关闭线程池
shutdown和shutdownnow方法来关闭。原理遍历线程,然后逐个interrupt方法中断线程,shutdownnow首先将
线程设置成stop然后停止或者暂停任务的线程,并返回等待执行的任务的列表。
而shutdown只是将线程设置shutdown状态,然后中断所有没有在执行任务的线程
合理配置线程池
任务性质:cpu密集型,io和混合任务
任务的优先级
任务执行时间
任务的依赖性
线程池的监控
taskCount:线程池需要执行任务的数量
completedTaskCount:线程池执行过程已完成的最大数量
largestPoolSize:线程池曾经创建过最大线程的数量
文章来源《并发编程艺术》