zoukankan      html  css  js  c++  java
  • 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 做状态操作

  • 相关阅读:
    CF 120F Spider 树的直径 简单题
    POJ 1155 TELE 背包型树形DP 经典题
    CF 219D Choosing Capital for Treeland 树形DP 好题
    POJ 3162 Walking Race 树形DP+线段树
    HDU 2196 Computer 树形DP 经典题
    __str__()、__repr__()和__format__()
    item系列方法
    getattribute
    isinstance和issubclass
    继承方式完成包装
  • 原文地址:https://www.cnblogs.com/yun965861480/p/11004821.html
Copyright © 2011-2022 走看看