最近,由于项目里需要用到线程池来提高处理速度,记录一下spring的taskExecutor执行器来实现线程池。
这里省略了Service接口的定义和在applicationContext.xml文件中配置相应的bean(service)。
1、处理器实现类
package com.shine.job;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.task.TaskExecutor;
import com.shine.service.Service;
/**
* 处理器接口实现类
*/
public class ProcessorImpl implements Processor {
// 日志对象
private static Log logger = LogFactory.getLog(ProcessorImpl.class);
// 执行器
private TaskExecutor taskExecutor;
// 业务接口
private Service service;
public void process() {
// 使用多线程处理
taskExecutor.execute(new Runnable(){
public void run() {
try {
logger.debug("[Thread "
+ Thread.currentThread().getId()
+ " start]");
// 业务处理
service.handle(name);
logger.debug("[Thread "
+ Thread.currentThread().getId()
+ " end]");
} catch (RuntimeException e) {
logger.error("Service handle exception",e);
}
}
});
}
}
public void setService(Service service) {
this.service = service;
}
public void setTaskExecutor(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
}
2、applicationContext.xml配置
<!-- 线程池(执行器) -->
<task:executor id="taskExecutor" pool-size="1-4" queue-capacity="128" />
<!-- 处理接口 -->
<bean id="processor" class="com.shine.job.ProcessorImpl">
<property name="service" ref="service" />
<property name="taskExecutor">
<ref bean="taskExecutor" />
</property>
</bean>
其中:
pool-size="1-4",表示线程池活跃的线程数为1,最大线程数为4;
queue-capacity="128",表示任务队列的最大容量。
PS:关于taskExecutor还有一种配置bean来实现的,其配置的写法和参数与上面基本一致。
分享到:
相关推荐
通过深入学习Kestrel的配置、管理和监控,掌握XMemcached的使用技巧,以及理解Spring TaskExecutor的线程池管理策略,开发者可以有效地优化应用程序的性能,同时保证系统的可伸缩性和可靠性。在实际项目中,可能还...
Spring的TaskExecutor是Java线程池抽象的一个重要组成部分,它为开发者提供了一种在Spring框架内使用线程池的方式,而无需直接依赖于特定的Java版本或Java EE环境中的线程池实现。TaskExecutor接口的设计使得在不同...
在Spring框架中,线程池的使用是实现并发和异步任务执行的关键工具。线程池的概念源于Java的`java.util.concurrent.ExecutorService`接口,它允许我们管理一组可重用的工作线程,以提高系统效率并减少资源消耗。...
在`spring3.0.5_TaskExecutor`这个压缩包中,可能包含了Spring 3.0.5版本关于线程池的示例代码和配置文件,你可以通过研究这些示例来进一步了解如何在实际项目中使用Spring的线程池功能。 总结来说,Spring的线程池...
同时,线程池相关的面试题可能涵盖Spring TaskExecutor,它是Spring提供的异步任务执行框架,支持自定义线程池配置,如核心线程数、最大线程数、队列容量等。 数据库锁是并发控制的重要手段,面试中可能会问到乐观...
在Spring框架中,定时任务和线程池是两个非常重要的组件,它们可以帮助我们实现高效的后台任务处理。这篇博文“Spring基于线程池的定时任务线程异常实践”深入探讨了如何在Spring中结合线程池来执行定时任务,并且...
本文详细介绍了如何在Spring3.2.6中配置线程池和定时任务,包括XML配置文件的具体设置以及程序类的实现。通过这种方式,可以有效地管理后台任务的执行,提高系统的并发处理能力。这种配置方式不仅适用于Spring3.2.6...
此外,Spring还提供了对任务调度的支持,比如通过`ThreadPoolTaskScheduler`实现基于线程池的定时任务调度,它可以与`TaskExecutor`一起使用,提供灵活的任务调度能力。这使得应用程序能够在指定的时间间隔执行周期...
Spring Boot利用@Async实现异步调用:自定义线程池 Spring Boot是一个流行的Java框架,它提供了许多实用的特性来简化应用程序的开发。其中,异步调用是Spring Boot中的一个重要特性,它允许开发者将一些耗时的任务...
Spring框架还提供了其他的线程池和定时任务执行的实现类,例如ApplicationEventMulticaster、Quartz等,这些实现类都使用TaskExecutor和TaskScheduler作为抽象接口来屏蔽掉底层JDK版本间以及Java EE中的线程池和定时...
本篇将深入探讨Spring TaskExecutor的基本概念、使用方法以及相关的实战示例。 1. **TaskExecutor接口** TaskExecutor是Spring提供的一个接口,它定义了一个execute(Runnable task)方法,用于提交一个Runnable任务...
JDK线程池和Spring线程池是两种常用的线程池实现,它们都提供了线程池的功能,但它们在使用和配置上有所不同。下面我们将详细介绍JDK线程池和Spring线程池的使用实例解析。 JDK线程池 JDK线程池是Java中的一个内置...
Spring提供了多种异步线程池的接口类,包括TaskExecutor、SimpleAsyncTaskExecutor、SyncTaskExecutor、ConcurrentTaskExecutor、SimpleThreadPoolTaskExecutor、ThreadPoolTaskExecutor等。其中,...
- **Configurations**:配置文件,定义Spring TaskExecutor的参数,如线程池大小、超时时间等,以及Kestrel和XMemcached的连接信息。 - **Testing**:单元测试和集成测试,确保各个组件正确运行和协同工作。 通过...
本文将详细介绍两种在Spring Boot中实现自定义异步线程池的方法,并通过具体的Demo进行说明。 ### 方法一:使用`@Async`注解和`ThreadPoolTaskExecutor` 1. **配置类:** 首先,我们需要创建一个配置类,用于定义...
线程池Executor是Spring框架提供的一种线程池实现,它允许我们在应用程序中创建和管理线程池,以便实现高效的并发处理。 首先,我们需要在Spring的配置文件中添加对线程池Executor的支持。我们可以在...
`ScheduledExecutorService`是Java自带的一个实现,也可以使用Spring的`ConcurrentTaskScheduler`,后者可以与`ThreadPoolTaskExecutor`结合使用。通过`@Scheduled`注解,我们可以很方便地在Spring Bean上定义定时...
Spring Boot 提供了 @Async 注解,可以将方法异步化,使得方法的调用者不需要等待方法的执行结果,直接返回,而方法的实际执行将提交给 Spring 的 TaskExecutor 中,由指定的线程池中的线程执行。 2. TaskExecutor...
这个“spring 任务调度实现代码例子”很可能是包含了一些示例代码,用于演示如何在Spring应用中配置和使用任务调度。下面将详细解释Spring任务调度的关键概念和实现方法。 1. **Spring Task模块** Spring Task是...
这个"Spring定时调度简单实现源码"很显然是一个关于如何在Spring中配置和使用定时任务的示例代码包。下面我们将深入探讨Spring的定时调度机制以及其核心组件。 Spring的定时任务调度主要依赖于两个关键组件:`Task...