线程池的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