线程池的类型和状态
一、线程池的类型
1.通过Executors工具类创建的线程池对象
- Executors.newFixedThreadPool(nThreads):固定线程数目的线程池;
- 核心线程数和最大线程数一致;
- 只要非核心线程空闲,则立刻被回收;
- 工作队列为无界队列。
- Executors.newCachedThreadPool():可缓存线程,线程数根据任务动态调整的线程池;
- 核心线程数为0;
- 最大线程数为Integer.MAX_VALUE;
- 只要非核心线程空闲存活时间为60秒;
- 工作队列为同步队列。
- Executors.newSingleThreadExecutor():单线程的线程池;
- 核心线程数为1;
- 最大线程数为1;
- 只要非核心线程空闲,则立刻被回收;
- 工作队列为无界队列。
- Executors.newScheduledThreadPool(corePoolsize):能够实现定时、周期执行任务的线程池;
调用了ScheduledThreadPoolExecutor实现类的ScheduledThreadPoolExecutor方法实现
- 最大线程数为Integer.MAX_VALUE;
- 只要非核心线程空闲,则立刻被回收;
- 工作队列为DelayedWorkQueue。
2.常见的线程池实现类
- ThreadPoolExecutor:标准线程池实现类;
- ScheduledThreadPoolExecutor :执行定时任务或周期性任务的线程池实现类;
- ForkJoinPool :用于任务分治的线程池实现类,它支持任务的分叉Fork和合并Join ,适合处理可以分解为多个子任务并行执行的计算密集型任务;
二、线程池的状态
线程池的状态分为:RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED
- RUNNING(运行状态):线程池一旦被创建,就处于RUNNING状态。
- 调用线程池的shutdown()方法,可以切换到SHUTDOWN状态;
- 调用线程池的shutdownNow()方法,可以切换到STOP状态。
- SHUTDOWN(关闭状态):该状态下的线程池不会接收新任务,但是会处理队列中的任务
- 当队列中的任务为空时,并且线程池中执行的任务也为空时,线程池进入TIDYING状态。
- STOP(停止状态):该状态下的线程池不会接收新任务,也不会处理队列中的任务,还会中断正在运行中的任务
- 线程池中执行的任务也为空时,线程池进入TIDYING状态。
- TIDYING(整理状态):该状态表明所有的任务都已经终止,记录的任务数量为0
- 当terminated()方法执行完毕,进入TERMINATED状态。
- TERMINATED(终止状态):该状态表明线程池彻底关闭。