莫大人

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 做状态操作

 

posted on 2019-06-11 17:19  莫大人  阅读(129)  评论(0编辑  收藏  举报

导航