ThreadPoolExecutor线程池源码解读
来源:互联网 发布:ui设计师必备软件 编辑:程序博客网 时间:2024/06/05 15:51
主要变量:
构造函数:也就是创建类的时候,需要注入参数。
执行函数:执行在未来给定任务的某个时候。任务在一个新的线程或在现有池线程可以执行。
ensureQueuedTaskHandled()函数:使用了锁机制。
reject 函数
<span style="font-size:18px;">private volatile int corePoolSize;private volatile int maximumPoolSize;private volatile int poolSize;</span>
构造函数:也就是创建类的时候,需要注入参数。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0) throw new IllegalArgumentException(); if (workQueue == null || threadFactory == null || handler == null) throw new NullPointerException(); this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler; }
执行函数:执行在未来给定任务的某个时候。任务在一个新的线程或在现有池线程可以执行。
public void execute(Runnable command) { if (command == null) throw new NullPointerException(); if (poolSize >= corePoolSize || !addIfUnderCorePoolSize(command)) { if (runState == RUNNING && workQueue.offer(command)) { if (runState != RUNNING || poolSize == 0) ensureQueuedTaskHandled(command); } else if (!addIfUnderMaximumPoolSize(command)) reject(command); // is shutdown or saturated } }
ensureQueuedTaskHandled()函数:使用了锁机制。
private void ensureQueuedTaskHandled(Runnable command) { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); boolean reject = false; Thread t = null; try { int state = runState; if (state != RUNNING && workQueue.remove(command)) reject = true; else if (state < STOP && poolSize < Math.max(corePoolSize, 1) && !workQueue.isEmpty()) t = addThread(null); } finally { mainLock.unlock(); } if (reject) reject(command); else if (t != null) t.start(); }
reject 函数
void reject(Runnable command) { handler.rejectedExecution(command, this); }
rejectedExecution函数 执行任务中的R呼叫者的线程,如果执行程序已被关闭,在这种情况下,任务被丢弃。
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { r.run(); } }
0 0
- ThreadPoolExecutor线程池源码解读
- 线程池ThreadPoolExecutor源码解析
- ThreadPoolExecutor线程池源码分析
- ThreadPoolExecutor线程池源码分析
- JAVA线程池(ThreadPoolExecutor)源码分析
- JAVA线程池(ThreadPoolExecutor)源码分析
- JAVA线程池(ThreadPoolExecutor)源码分析
- Java 线程池 ThreadPoolExecutor 源码分析
- JAVA线程池(ThreadPoolExecutor)源码分析
- Android Java 线程池 ThreadPoolExecutor源码篇
- 线程池ThreadPoolExecutor类源码分析
- jdk 线程池 threadPoolExecutor 源码剖析
- 《Java源码分析》:线程池 ThreadPoolExecutor
- JUC源码分析26-线程池-ThreadPoolExecutor
- Java线程池ThreadPoolExecutor源码分析
- Java 线程池 ThreadPoolExecutor 源码分析
- Java线程池源码解析(ThreadPoolExecutor)
- Java线程池ThreadPoolExecutor源码解析
- 用KNN做手写数字识别(mnist)
- Python 处理 JSON
- 学习设置 Git 代理
- python3.4 获取302请求
- TCP的状态转化过程(11中状态)以及TIME_WAIT状态
- ThreadPoolExecutor线程池源码解读
- Linux性能测试命令系列(6)- 用strace查看给定命令是标准错误输出(2)还是标准输出(1)
- Qt学习(五)------实例定时关机小程序
- 进击的码农7
- POJO和javabean的异同
- 自定义view之人性化Progress bar
- 一行行看SDWebImage源码
- 打印函数调用的堆栈信息
- Java集合框架(下)之Map的containsKey()与containsValue()方法