参数
1 | public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, |
- corePoolSize: 线程池核心线程的数量;
- maximumPoolSize: 线程池可创建的最大线程数量;
1 | private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); |
当创建线程池后,初始时,线程池处于 RUNNING 状态;
如果调用了 shutdown()方法,则线程池处于 SHUTDOWN 状态,此时线程池不 能够接受新的任务,它会等待所有任务执行完毕;
如果调用了 shutdownNow()方法,则线程池处于 STOP 状态,此时线程池不能 接受新的任务,并且会去尝试终止正在执行的任务;
当线程池处于 SHUTDOWN 或 STOP 状态,并且所有工作线程已经销毁,任务缓 存队列已经清空或执行结束后,线程池被设置为 TERMINATED 状态。
1 | private final BlockingQueue<Runnable> workQueue;//任务缓存队列,用来存放等待执行的任务 |
最核心的任务提交方法是 execute()方法,虽然通 过 submit 也可以提交任务,但是实际上 submit 方法里面最终调用的还是 execute()方法