- 浏览: 3631 次
- 性别:
- 来自: 上海
最新评论
文章列表
ThreadPoolExecutor 的关闭流程很简单
void shutdown()
1. 获取 mainLock 锁
2. 当前的状态如果是 SHUTDOWN ,STOP ,TIDYING ,TERMINATED 则退出
3. 如果不是则 CAS 设置状态为 SHUTDOWN
4. CAS 失败则回到 step 2 继续
5. 对所有 Worker 线程调用 interrupt() 中断阻塞
6. 释放 mainLock ,调用 tryTerminate() 关闭线程池
step 5 中断所有线程后,新的任务不能再提交进来,但是 worker 线程并不会立即退出,会继续从 workQue ...
ThreadPoolExecutor 实现了 ExecutorService 接口,从常用的方法来看一下 ThreadPoolExecutor 内部实现的大致流程.
Future submit(Callable task)
这个方法的实现在父类 AbstractExecutorService 里面:
1. 用 Callable task去创建 FutureTask 实例。FutureTask 是 Runnab ...
写这篇文章主要还是为了强迫自己把学习Java源代码的一些要点记录下来。
构造函数:
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandl ...