线程池执⾏流程,流程图,简单易懂
线程池状态
线程池原理
线程池状态
线程池和线程⼀样拥有⾃⼰的状态,在ThreadPoolExecutor类中定义了⼀个volatile变量runState来表⽰线程池的状态,线程池有四种状态,分别为RUNNING、SHURDOWN、STOP、TERMINATED。
线程池创建后处于RUNNING状态。
调⽤shutdown后处于SHUTDOWN状态,线程池不能接受新的任务,会等待缓冲队列的任务完成。
调⽤shutdownNow后处于STOP状态,线程池不能接受新的任务,并尝试终⽌正在执⾏的任务。java线程池创建的四种
当线程池处于SHUTDOWN或STOP状态,并且所有⼯作线程已经销毁,任务缓存队列已经清空或执⾏结束后,线程池被设置为TERMINATED状态。
线程池原理:预先启动⼀些线程,线程⽆限循环从任务队列中获取⼀个任务进⾏执⾏,直到线程池被关
闭。如果某个线程因为执⾏某个任务发⽣异常⽽终⽌,那么重新创建⼀个新的线程⽽已,如此反复。
⼀、线程池的处理流程
⼆、配置线程池⼤⼩配置
⼀般需要根据任务的类型来配置线程池⼤⼩:
如果是CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 NCPU+1
如果是IO密集型任务,参考值可以设置为2*NCPU
当然,这只是⼀个参考值,具体的设置还需要根据实际情况进⾏调整,⽐如可以先将线程池⼤⼩设置为参考值,再观察任务运⾏情况和系统负载、资源利⽤率来进⾏适当调整。
三、Java提供的四种线程池实现
(1)newCachedThreadPool创建⼀个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若⽆可回收,则新建线程。(2)newFixedThreadPool 创建⼀个定长线程池,可控制线程最⼤并发数,超出的线程会在队列中等待。
(3)newScheduledThreadPool 创建⼀个定长线程池,⽀持定时及周期性任务执⾏。
(4)newSingleThreadExecutor 创建⼀个单线程化的线程池,它只会⽤唯⼀的⼯作线程来执⾏任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执⾏。
总结
提⽰:以上就是线程池的介绍,更加详细深⼊的视频讲解,请联系作者。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论