public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
这个构造函数 中 最后这个参数 RejectedExecutionHandler handler: 线程池对拒绝任务的处理策略;
详细点说:当 Executor 已经关闭,并且 Executor 将有限边界用于最大线程和工作队列容量,且已经饱和时,在方法 execute(java.lang.Runnable) 中提交的新任务将被拒绝。在以上两种情况下,execute 方法都将调用其 RejectedExecutionHandler 的 RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor) 方法
一般都是直接用的new ThreadPoolExecutor.DiscardOldestPolicy()作为最后一个参数。
一般常用的handler 有四种预定义的处理程序策略:
A. 在默认的 ThreadPoolExecutor.AbortPolicy 中,处理程序遭到拒绝将抛出运行时 RejectedExecutionException 。
B. 在 ThreadPoolExecutor.CallerRunsPolicy 中,线程调用运行该任务的 execute 本身。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。
C. 在 ThreadPoolExecutor.DiscardPolicy 中,不能执行的任务将被删除。
D. 在 ThreadPoolExecutor.DiscardOldestPolicy 中,如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)。
定义和使用其他种类的 RejectedExecutionHandler 类也是可能的,但这样做需要非常小心,尤其是当策略仅用于特定容量或排队策略时。追问不知道 你用过这个线程池没?我想请教下里面所说的被拒绝的任务是什么意思?什么情况下任务被拒绝?那如果用了 DiscardOldestPolicy()那么 之前最老的任务没有执行完也会被删除吗?
回答上面已经说过啊,通俗点说两种情况算拒绝:
1 线程池已关闭;
2 线程池已饱和(处于最大线程和工作队列容量)时在以上两种情况下,在方法 execute(java.lang.Runnable) 中提交的新任务将被拒绝。
execute 方法都将调用其 RejectedExecutionHandler 的 RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor) 方法
分享到:
相关推荐
### Python concurrent.futures 模块知识点详解 #### 1. Executor类 Executor是concurrent.futures模块中的一个抽象类,它定义了执行可调用对象的异步操作的方法。由于Executor本身是一个抽象类,因此不能直接使用...
在Java中,`java.util.concurrent.ExecutorService` 接口代表了一个线程池服务,而`ThreadPoolExecutor` 是它的具体实现,我们可以自定义线程池的核心参数,如核心线程数、最大线程数、线程存活时间、线程队列等。...
8. **线程池**: `ThreadPoolExecutor`是`ExecutorService`的一个实现,允许开发者自定义线程池的参数,如核心线程数、最大线程数、任务队列等,有助于管理和优化系统的线程资源。 9. **并发编程模式**: 深入理解`...
`ExecutorService`定义了执行任务的接口,而`ThreadPoolExecutor`则是具体的线程池实现,允许用户自定义线程池的大小、任务队列、拒绝策略等参数。 3.1 `ThreadPoolExecutor` `ThreadPoolExecutor`构造函数允许设置...
2. **Java ThreadPoolExecutor**:ThreadPoolExecutor是Java并发库`java.util.concurrent`中的核心类,它提供了线程池服务,可以创建并管理一组可重用的线程。线程池可以控制并发级别,避免频繁地创建和销毁线程带来...
2. **线程池**:ThreadPoolExecutor允许开发者自定义线程池参数,如核心线程数、最大线程数、线程存活时间等,有效控制并发程度,防止资源过度消耗。ScheduledThreadPoolExecutor则可以调度延迟或周期性的任务。 3....
下面是一个使用Python的`concurrent.futures`模块实现多线程异步调用(并参递参数)的示例: ```python import concurrent.futures def long_running_task(param1, param2): # 这里是耗时操作 result = param1 +...
`ThreadPoolExecutor`是Java并发包`java.util.concurrent`中的核心类,用于实现线程池服务。通过设置线程池参数,我们可以定制线程池的行为,比如核心线程数、最大线程数、线程空闲时间等。 创建一个`...
Python线程池模块`ThreadPoolExecutor`是Python标准库`concurrent.futures`的一部分,它提供了一种方便且高效的方式来管理线程,以便并发地执行多个任务。线程池的概念允许我们预先创建一组线程,然后根据需要分配...
在分析源码之前,我们需要了解ThreadPoolExecutor构造函数的一些关键参数: - `corePoolSize`:核心线程数,即使线程空闲,线程池也会保持这个数量的线程。如果`allowCoreThreadTimeOut`设为`true`,核心线程的存活...
9. **ThreadPoolExecutor**:线程池的具体实现,可以通过配置核心线程数、最大线程数、任务队列等参数来定制线程池的行为。 10. **ScheduledExecutorService**:扩展了`ExecutorService`,支持定时和周期性执行任务...
`concurrent`包提供了一种更高级的线程管理方式,通过`ExecutorService`和`Future`接口,以及`ThreadPoolExecutor`等实现类,我们可以更好地控制线程的生命周期和任务调度。 1. **ExecutorService**: `...
ThreadPoolExecutor是Java并发编程中非常重要的一个组件,它位于`java.util.concurrent`包下,用于管理线程资源,实现线程池服务。线程池通过有效地控制并发执行的任务数量,可以提高系统的性能和稳定性。 ...
`ThreadPoolExecutor`则是一个具体的实现,可以根据配置参数动态调整线程池的大小,处理任务队列,并在必要时进行线程的创建和销毁。 `BlockingQueue`是backport-util-concurrent中的另一个关键组件,它是一个并发...
ThreadPoolTaskExecutor是Spring提供的一种线程池实现,基于ThreadPoolExecutor,它提供了诸如线程池大小、队列大小、线程存活时间等参数,可以根据实际情况进行配置。 例如,我们可以在applicationContext.xml文件...
`ExecutorService`是执行任务的主要接口,而`ThreadPoolExecutor`是其最常见的实现,允许我们自定义线程池的大小、工作队列等参数。 2. **线程池**:`ThreadPoolExecutor`通过维护一组可重用的工作线程来处理任务,...
其容量可以通过构造函数传入参数设定,若未指定则默认为Integer.MAX_VALUE。 理解了这些基础后,我们还需要了解如何在实际项目中选择合适的`BlockQueue`。在内存资源充足且追求极致性能的情况下,`...
标题中的“基于事件(AOP)的concurrent线程池”是指一种将面向切面编程(AOP)思想与Java并发库中的线程池(ThreadPoolExecutor)相结合的设计模式。这种模式利用了AOP的特性,通过在执行任务前后插入特定的处理逻辑...
ThreadPoolExecutor是一个核心的线程池实现,它通过线程池参数配置来管理执行任务。它实现了ExecutorService接口和DisposableBean接口,提供了任务提交、处理和线程池管理等功能。 CompletionService是一个接口,...