ThreadPoolExecutor的七大参数
时间: 2024-06-13 09:02:21 浏览: 157
`ThreadPoolExecutor`是Java并发包中的一个重要类,用于在一组线程池中执行任务。它有多个可配置参数,以下是七个关键参数:
1. **CorePoolSize** (核心线程数):线程池启动时就存在的最小线程数。即使所有任务都能快速完成,这些线程也会一直存在。
2. **MaximumPoolSize** (最大线程数):线程池允许的最大线程数。当任务提交超出这个限制时,如果队列已满,会拒绝任务(默认抛出RejectedExecutionException)。
3. **Queue** (任务队列):用于存放等待执行的任务,常见的有`ArrayBlockingQueue`、`LinkedBlockingQueue`等。当线程池被占满时,新任务将在此队列中等待。
4. **ThreadFactory**:创建新线程的工厂,可以自定义线程名称或设置其他属性。
5. **RejectedExecutionHandler**:处理拒绝策略,如`AbortPolicy`(默认)抛出异常,`CallerRunsPolicy`让提交任务的线程执行任务,`DiscardOldestPolicy`丢弃队列最旧的任务。
6. **KeepAliveTime** 或 **TerminationTimeout**:空闲线程等待新任务的时间,或者线程池等待终止的时间。
7. **ExecutePolicy**:一个`Callable`实例执行策略,通常与`Future`接口一起使用,可以选择是否返回结果或在超时后取消任务。
相关问题
ThreadPoolExecutor的七个核心参数及详解
Java ThreadPoolExecutor的七个核心参数及详解如下:
1. corePoolSize:线程池中的核心线程数,即在没有任务需要执行时线程池的大小。当有任务需要执行时,线程池会自动扩容,直到达到maximumPoolSize。
2. maximumPoolSize:线程池中允许的最大线程数。当workQueue已满时,线程池会自动扩容,直到达到maximumPoolSize。
3. keepAliveTime:线程池中的非核心线程空闲时的存活时间。当线程池中的线程数大于corePoolSize时,如果这些线程空闲时间超过keepAliveTime,则这些线程会被销毁,直到线程池中的线程数不大于corePoolSize。
4. unit:keepAliveTime的时间单位。
5. workQueue:用于存放等待执行的任务的阻塞队列。常用的有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。
6. threadFactory:用于创建新线程的工厂类。可以自定义线程的名称、优先级等属性。
7. handler:当线程池中的线程数达到maximumPoolSize并且workQueue已满时,新提交的任务会交给handler来处理。常用的有ThreadPoolExecutor.AbortPolicy、ThreadPoolExecutor.CallerRunsPolicy、ThreadPoolExecutor.DiscardOldestPolicy、ThreadPoolExecutor.DiscardPolicy。
java中threadpoolexecutor的构造方法的七中参数分别是什么含义
ThreadpoolExecutor的构造方法的七个参数分别是:
1. corePoolSize:线程池中保持的最小线程数,即使它们处于空闲状态。
2. maximumPoolSize:线程池中允许的最大线程数。
3. keepAliveTime:当线程池中的线程数大于核心线程数时,这是多余的空闲线程在终止之前等待新任务的最长时间。
4. unit:keepAliveTime参数的时间单位。
5. workQueue:用于在执行任务之前保存任务的队列。此队列将仅保存由execute方法提交的Runnable任务。
6. threadFactory:用于创建新线程的工厂。
7. handler:当线程池已满并且队列已满时,用于处理新提交的任务的处理程序。
阅读全文