小建议,空闲的时候多阅读一下java各种关键或者包源码,第一加强对其认识,第二 丰富武器库,不同场景可选择的技术手段更多,取最优
不断更新中,有问题欢迎指正,希望没有浪费你的时间,有所收获
作用
1-节约资源,线程的创建,销毁需要占用系统资源
2-提高响应时间,线程的创建需要时间
3-便于线程的管理
ThreadPoolExecutor 详解
参数
corePoolSize:
核心线程数,线程池允许的最少同时运行的线程数
maximumPoolSize:
最大线程数,线程池允许的最大运行线程数
workQueue:
缓存队列,当线程数量大于核心线程数时会加入到此队列中,等等线程处理或者丢弃
keepAliveTime:
线程池空闲时,介于核心线程数到最大线程数的线程根据这个时间设置,自动销毁
threadFactory:
创建线程的工厂
static class DaemonThreadFactory implements ThreadFactory {
public Thread newThread(Runnable runnable) {
Thread newThread = new Thread(runnable);
newThread.setDaemon(true);
return newThread;
}
}
handler:
拒绝策略,最大线程运行,队列已满就会执行
1-直接抛出 RejectedExecutionException 异常
2-调用自己的线程执行;但是这种会降低新任务的体检速度,影响整体性能;如果一个任务都不能丢,选择此任务
3-丢弃最早的未处理的任务请求
4-直接丢弃不做处理
工作流程
1-线程池是否有线程,无,则创建线程执行
2-线程数是否达到核心线程数,无,则获取执行
3-核心线程数已满,则加入工作队列中
4-核心队列是否已满,已满则开启线程
5-判断线程是否达到最大线程数,无,则继续开启线程执行
6-核心线程数和队列都满了,则 执行拒绝策略