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

  • 相关阅读:
    视图
    触发器
    DNS
    DHCP
    SSH 详解
    apt-get
    java split
    数组指针 指针数组
    函数指针
    网络协议
  • 原文地址:https://www.cnblogs.com/yun965861480/p/11004821.html
Copyright © 2020-2023  润新知