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

  • 相关阅读:
    git-for-windows 安装无图标的问题
    开源协议
    根据iframe获取window
    JS的checkbox状态切换dom无变化
    SQL条件!=null查不出数据
    jquery获取select选中项的文本
    泛型擦除
    树形菜单数据结构
    jqgrid动态填充select
    巨坑:jqgrid竟然取不到编辑模式下input的值
  • 原文地址:https://www.cnblogs.com/yun965861480/p/11004821.html
Copyright © 2011-2022 走看看