线程池
线程池的Tips
ThreadPoolExecutor的参数列表
- int corePoolSize:核心线程数
- int maximumPoolSize:最大线程数
- long keepAliveTime:线程空闲时间
- TimeUnit unit:时间单位
- BlockingQueue workQueue:阻塞队列
- ThreadFactory threadFactory:线程工厂
- RejectedHandler handler:拒绝策略
动态参数设置
- ThreadPoolExecutor.setCorePoolSize(int corePoolSize)
- ThreadPoolExecutor.setMaximumPoolSize(int maximumPoolSize)
- ThreadPoolExecutor.setKeepAliveTime(long time, TimeUnit unit)
- ThreadPoolExecutor.setThreadFactory(ThreadFactory threadFactory)
- ThreadPoolExecutor.setRejectedExecutionHandler(RejectedExecutionHandler handler)
- allowCoreThreadTimeOut(boolean value):允许核心线程超时,默认为false,即核心线程不会超时
线程池的状态获取
- getCorePoolSize():获取核心线程数
- getMaximumPoolSize():获取最大线程数
- getPoolSize():获取当前线程数
- getActiveCount():获取活动线程数
- getTaskCount():获取任务总数
- getCompletedTaskCount():获取已完成任务数
线程预热
ThreadPoolExecutor默认状态是通过execute方法提交一个任务后,来创建工作线程执行,创建线程需要一定的启动成本,需要提升运行时间,最后ThreadPoolExecutor提供线程预热:
- prestartCoreThread():预热一个核心线程
- prestartAllCoreThreads():预热所有核心线程
预热核心线程,因为Max线程需要依赖BlockingQueue的状态
可观测性
Java Thread状态
Java ThreadPoolExecutor状态
SPI
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 冰红茶怪兽!