- int corePoolSize :线程池中的核心线程数
- int maximumPoolSize :线程池中的最大线程数
- long keepAliveTime :除核心线程数以外,其他空闲线程最大存活的时间
- TimeUnit unit :存活时间的单位
- BlockingQueue<Runnable> workQueue :存放任务的队列
- ThreadFactory threadFactory:线程池生产线程的工厂类
- RejectedExecutionHandler handler:当队列已满线程池拒绝任务的策略
- boolean allowCoreThreadTimeOut :是否允许核心线程超时(这个为true,当核心线程空闲到keepAliveTime后,会被回收。 为false时,核心线程空闲会一直阻塞在队列上等待新任务)
二、JDK的线程池的状态
|
运行状态 |
状态描述 |
线城池状态的表示 |
|---|---|---|
|
RUNNING |
能接受新提交的任务,并且也能处理阻塞队列中的任务; |
RUNNING = -1 << 29 |
|
SHUTDOWN |
关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保存的任务。 |
SHUTDOWN = 0 << 29 |
|
STOP |
不能接受新任务,也不处理队列中的任务,会中断正在处理任务的线程。 |
STOP = 1 << 29 |
|
TIDYING |
如果所有的任务都已终止了,workerCount (有效线程数) 为0 |
TIDYING = 2 << 29 |
|
TERMINATED |
在terminated() 方法执行完后进入该状态 |
TERMINATED = 3 << 29 |
RUNNING -1<<29==>11100000 00000000 00000000 00000000
SHUTDOWN 0<<29==>00000000 00000000 00000000 00000000
STOP 1<<29 ==>00100000 00000000 00000000 00000000
TIDYING 2<<29 ==>01000000 00000000 00000000 00000000
TERMINATED 3<<29 ==>01100000 00000000 00000000 00000000
CAPACITY (1<<29)-1 ==>00011111 11111111 11111111 11111111
//这个代表线程的控制器:int类型为32位。 其中高3位表示线程池的状态,低29位表示线城池中的线程数量。
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));