threadpoolexecutor源码
时间: 2023-05-31 08:20:39 浏览: 110
ThreadPoolExecutor源码解析.pdf
5星 · 资源好评率100%
### 回答1:
ThreadPoolExecutor是Java中的一个线程池实现类,它继承自AbstractExecutorService类。它提供了一个可重用的线程池,可以管理多个线程,以及控制线程的数量、执行时间和优先级等。ThreadPoolExecutor的源码实现了线程池的核心功能,包括线程池的创建、线程的添加、线程的执行、线程的销毁等。它是Java中常用的线程池实现之一,也是Java并发编程中的重要组件之一。
### 回答2:
ThreadPoolExecutor是Java中的线程池技术之一,位于java.util.concurrent包中。其允许我们在需要时重复利用已创建的线程,避免了创建和销毁线程的开销,同时还可以提高程序的响应效率。
ThreadPoolExecutor的构造方法包括七个参数。分别是:
1. corePoolSize:核心线程数;
2. maximumPoolSize:最大线程数;
3. keepAliveTime:闲置线程存活时间;
4. unit:时间单位;
5. workQueue:任务队列;
6. threadFactory:线程工厂;
7. handler:饱和策略。
其中,corePoolSize是线程池中的核心工作者线程数量,当提交的任务数小于corePoolSize时,会创建新的线程来处理任务直到达到corePoolSize的数量;如果当前没有空闲线程,且队列中的任务数小于workQueue的max size,则会将任务存入队列;如果队列已满且当前线程数小于maximumPoolSize,则会再创建新的线程来处理任务;如果线程数达到最大值,且队列已满,则会根据所选择的饱和策略来处理任务。饱和策略有如下四种:
1. AbortPolicy:直接抛出RejectedExecutionException;
2. CallerRunsPolicy:由调用线程处理该任务;
3. DiscardOldestPolicy:丢弃最老的任务,执行当前任务;
4. DiscardPolicy:直接丢弃当前任务。
实际上,ThreadPoolExecutor类默认的饱和策略是AbortPolicy。
ThreadPoolExecutor还提供了一些方法,包括execute()、submit()、shutdown()、isTerminating()、isShutdown()等,方便我们对线程池进行管理。
总之,ThreadPoolExecutor是一个非常实用的技术,在多线程处理时可以大幅提升程序的效率。掌握和熟悉ThreadPoolExecutor源码可以帮助我们更好地使用和理解线程池技术。
### 回答3:
Java中提供了线程池技术,ThreadPoolExecutor就是其中之一。ThreadPoolExecutor继承自ExecutorService接口,是一个线程池的实现类,它可以管理线程的创建、终止、任务的排队和执行等。
ThreadPoolExecutor的源码实现主要分为两部分:构造函数和任务提交执行。
一、构造函数:
ThreadPoolExecutor的构造函数有四个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime和workQueue。
1、corePoolSize:线程池中核心线程个数,当有新任务时,如果当前线程数小于corePoolSize,那么线程池会新建一个线程去执行任务;
2、maximumPoolSize:线程池中线程的最大个数,当线程池中的线程个数达到maximumPoolSize时,如果任务继续增加,则会将任务加入到阻塞队列workQueue中去,等待线程来执行任务;
3、keepAliveTime:非核心线程的最大等待时间,当当前线程池中的线程数大于corePoolSize时,如果这些线程的空闲时间超过keepAliveTime,则直接终止它们的运行;
4、workQueue:任务队列,用于存放阻塞等待的任务。
二、任务提交执行:
任务提交执行的过程主要涉及到ThreadPoolExecutor的submit和execute方法。
1、submit方法:
submit方法是线程池提供给应用程序的一种提交任务的方式,它是ExecutorService中的方法。具体操作如下:
a. 将任务加入到阻塞队列workQueue中,并且返回一个Future类型的对象,用于获取任务执行的结果;
b. 如果当前线程池中的线程数小于corePoolSize,则会启动一个新线程去执行任务;
c. 如果当前线程池中的线程数大于等于corePoolSize,且workQueue未满,则将任务加入到workQueue中等待被执行;
d. 如果workQueue已满并且当前线程池中的线程数小于maximumPoolSize,则会启动一个新的线程去执行任务;
e. 如果workQueue已满且当前线程池中的线程数大于等于maximumPoolSize,则会执行拒绝策略。
2、execute方法:
execute方法是ThreadPoolExecutor中的方法,作用是执行任务。具体操作如下:
a. 如果当前线程池中的线程数小于corePoolSize,则会启动一个新线程去执行任务;
b. 如果当前线程池中的线程数大于等于corePoolSize,task会加入到workQueue中等待被执行;
c. 如果workQueue已满并且当前线程池中的线程数小于maximumPoolSize,则会启动一个新的线程去执行任务;
d. 如果workQueue已满且当前线程池中的线程数大于等于maximumPoolSize,则会执行拒绝策略。
总之,ThreadPoolExecutor是Java中线程池的一种实现方式。它可以管理线程的创建和维护,可以确保线程池中只有特定数量的线程,可以优化内存使用,避免因为线程过多导致系统性能下降。因此,开发者应该了解ThreadPoolExecutor的源码实现,以便更好地掌握线程池的使用。
阅读全文