ThreadPoolExecutor源码分析
线程池ThreadPoolExecutor源码分析
ThreadPoolExecutor execute 获取当前原子计数 当前运行中的worker数量 如果worker数量 < 核心线程数 添加工作线程 ThreadPoolExecutor.addWorker 状态检查 线程池数量校验 获取 ReentrantLock 重入锁 创建worker线程 ReentrantLock.lock 锁定 状态检查,线程状态检查 启动线程 run runWorker 执行工作线程 getTask 获取runable 锁定工作线程 beforeExecute 执行前 run 执行 afterExecute 执行后 解锁 如果线程为运行状态且入队列(workQueue.offer)成功 是 添加普通worker 否 如果添加普通worker失败 reject 拒绝请求 RejectedExecutionHandler.rejectedExecution AbortPolicy 抛出异常 AbortPolicyWithReport CallerRunsPolicy 重试启动 DiscardOldestPolicy DiscardPolicy 不做操作 NewThreadRunsPolicy 创建临时线程执行任务 finalize 线程池销毁 shutdown onShutdown
可以看到ThreadPoolExecutor提供了线程执行前(beforeExecute),执行后的空扩展方法(afterExecute),线程池销毁(onShutdown),这里给了我们更多的空间。
基于阻塞队列缓冲任务
通过 Condition 的 await/signal 实现等待/通知操作。
原子类 AtomicInteger 做状态操作