线程池优点
1线程的复用减少了创建和销毁对系统资源的开销
2没有了现用现创建过程的过程,增加了线程的执行响应速度
3方便线程的统筹管理
ThreadPoolExecutor参数含义流程
核心线程数
最大线程数
非核心线程闲置时间
上个参数的时间单位
阻塞队列长度
线程工厂 一般自己实现一个(可以根据默认的改)
拒绝策略 超出最大线程数➕阻塞队列时的任务执行方式(抛异常、直接扔掉不处理、挤掉队内等待最久的、交给调用线程去执行【就是直接执行线程的.run()方法,而不是.start()】)
流程
先核心,上一步满再进阻塞队,上一步满再开启非核心线程,上一步满执行拒绝策略
线程池的五种状态
running 运行 运行中
shutdown 关闭 调用shutdown()等待正在运行和队列中的也运行完的过程
stop 停止 调用shutdownNow()只等待正在运行的运行完的过程
tidying 整理 上两步执行完毕进入tidying
terminated 终止 tidying状态调用terminated()后
可参考 https://blog.csdn.net/zhanglong_4444/article/details/95758009
相比ThreadPoolExecutor 有如下实现:
FixedThreadPool
SingleThreadPool
CachedThreadPool
和自定义的
还有一种ForkJoinPool 有如下实现:
ForkJoinPool
WorkStealingPool