`
cywhoyi
  • 浏览: 421280 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spirng的ThreadPoolExecutor

 
阅读更多

模仿一般数据库连接池的配置,看了BoneCP的源代码实现,里面关于BoneCPConfig类的实现,采用了ThreadPoolExecutor的实现方式,然后就想到采用spring的注入方式,ThreadPoolExecutor在异步处理方面做得相当好。

那么接下来看下实现方式!

stpe1: spirng.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<!-- Beans Declaration -->
	<bean id="TestTask" class="org.ibyoung.task.TestTask"></bean>
	<bean id="ThreadPoolMonitorService" class="org.ibyoung.monitor.srv.ThreadPoolMonitorService">
		<property name="monitoringPeriod"  value="5" />
	</bean>
    <bean id="TestRejectedExecutionHandler" class="org.ibyoung.handler.TestRejectedExecutionHandler"></bean>
    <bean id="TestThreadPoolExecutorService" class="org.ibyoung.srv.TestThreadPoolExecutorService">
		<property name="corePoolSize"  value="1" />
		<property name="maxPoolSize"   value="3" />
		<property name="keepAliveTime" value="1" />
		<property name="queueCapacity" value="3" />
		<property name="testRejectedExecutionHandler" ref="TestRejectedExecutionHandler" />
	</bean>
	<bean id="Starter" class="org.ibyoung.start.Starter">
		<property name="threadPoolMonitorService" ref="ThreadPoolMonitorService" />
		<property name="testThreadPoolExecutorService" ref="TestThreadPoolExecutorService" />
	</bean>
</beans>

 step2: 声明配置文件

import java.util.concurrent.ThreadPoolExecutor;

import com.otv.handler.TestRejectedExecutionHandler;

/**
 * 
 * @author chenyang
 * 
 */
public interface ITestThreadPoolExecutorService {

	public ThreadPoolExecutor createNewThreadPool();

	public int getCorePoolSize();

	public void setCorePoolSize(int corePoolSize);

	public int getMaxPoolSize();

	public void setMaxPoolSize(int maximumPoolSize);

	public long getKeepAliveTime();

	public void setKeepAliveTime(long keepAliveTime);

	public int getQueueCapacity();

	public void setQueueCapacity(int queueCapacity);

	public TestRejectedExecutionHandler getTestRejectedExecutionHandler();

	public void setTestRejectedExecutionHandler(TestRejectedExecutionHandler testRejectedExecutionHandler);

}

 step3: 实现

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import com.otv.handler.TestRejectedExecutionHandler;

/**
 * 
 * @author chenyang
 * 
 */
public class TestThreadPoolExecutorService implements ITestThreadPoolExecutorService {

	private int  corePoolSize;
	private int  maxPoolSize; 
	private long keepAliveTime;
	private int  queueCapacity;
	TestRejectedExecutionHandler testRejectedExecutionHandler;
	
	public ThreadPoolExecutor createNewThreadPool() {
		ThreadPoolExecutor executor = new ThreadPoolExecutor(getCorePoolSize(), 
																getMaxPoolSize(), 
																getKeepAliveTime(), 
																TimeUnit.SECONDS, 
																new ArrayBlockingQueue<Runnable>(getQueueCapacity()), 
																getTestRejectedExecutionHandler());
		return executor;
	}
	
	public int getCorePoolSize() {
		return corePoolSize;
	}
	
	public void setCorePoolSize(int corePoolSize) {
		this.corePoolSize = corePoolSize;
	}
	
	public int getMaxPoolSize() {
		return maxPoolSize;
	}
	
	public void setMaxPoolSize(int maxPoolSize) {
		this.maxPoolSize = maxPoolSize;
	}
	
	public long getKeepAliveTime() {
		return keepAliveTime;
	}
	
	public void setKeepAliveTime(long keepAliveTime) {
		this.keepAliveTime = keepAliveTime;
	}
	
	public int getQueueCapacity() {
		return queueCapacity;
	}

	public void setQueueCapacity(int queueCapacity) {
		this.queueCapacity = queueCapacity;
	}
	
	public TestRejectedExecutionHandler getTestRejectedExecutionHandler() {
		return testRejectedExecutionHandler;
	}

	public void setTestRejectedExecutionHandler(TestRejectedExecutionHandler testRejectedExecutionHandler) {
		this.testRejectedExecutionHandler = testRejectedExecutionHandler;
	}

}

 step4: 监听类

import java.util.concurrent.ThreadPoolExecutor;

public interface IThreadPoolMonitorService extends Runnable {

	public void monitorThreadPool();
	
	public ThreadPoolExecutor getExecutor();
	
	public void setExecutor(ThreadPoolExecutor executor);
	
}

 step5: 服务启动类

import java.util.concurrent.ThreadPoolExecutor;

/**
 * 
 * @author chenyang
 * 
 */
public class Starter {
	
	private static Logger log = Logger.getLogger(TestRejectedExecutionHandler.class);
	
	IThreadPoolMonitorService threadPoolMonitorService;
	ITestThreadPoolExecutorService testThreadPoolExecutorService;
	
	public void start() {
		
		ThreadPoolExecutor executor = testThreadPoolExecutorService.createNewThreadPool();
		executor.allowCoreThreadTimeOut(true);
		
		threadPoolMonitorService.setExecutor(executor);
		
		Thread monitor = new Thread(threadPoolMonitorService);
		monitor.start();

		for(int i=1;i<10;i++) {
			executor.execute(new TestTask("Task"+i));
		}
		
		try	{
		    Thread.sleep(40000);
		} catch (Exception e)	{
		    log.error(e.getMessage());
		}
		System.out.println("-------------------------------------------");
		for(int i=10;i<19;i++) {
			executor.execute(new TestTask("Task"+i));
		}
		
		executor.shutdown();
	}	

	public IThreadPoolMonitorService getThreadPoolMonitorService() {
		return threadPoolMonitorService;
	}

	public void setThreadPoolMonitorService(IThreadPoolMonitorService threadPoolMonitorService) {
		this.threadPoolMonitorService = threadPoolMonitorService;
	}

	public ITestThreadPoolExecutorService getTestThreadPoolExecutorService() {
		return testThreadPoolExecutorService;
	}

	public void setTestThreadPoolExecutorService(ITestThreadPoolExecutorService testThreadPoolExecutorService) {
		this.testThreadPoolExecutorService = testThreadPoolExecutorService;
	}
}

 

分享到:
评论

相关推荐

    spring线程池ThreadPoolExecutor配置以及FutureTask的使用

    这个类是Spring对Java内置的`java.util.concurrent.ThreadPoolExecutor`的封装,允许开发者在Spring应用上下文中声明式地定义线程池。在本篇文章中,我们将深入探讨`ThreadPoolTaskExecutor`的配置及其使用,并结合`...

    Spring线程池ThreadPoolExecutor配置并且得到任务执行的结果

    Spring线程池ThreadPoolExecutor配置并且得到任务执行的结果 在Java中,线程池是一种非常重要的技术,能够帮助我们更好地管理线程资源,提高系统的性能和可扩展性。其中,ThreadPoolExecutor是Java中的一种线程池...

    spring线程池(同步、异步).docx

    3. `ThreadPoolTaskExecutor`:这是Spring最常用的线程池实现,它包装了`java.util.concurrent.ThreadPoolExecutor`,支持线程池配置,并且是异步执行任务的。 4. `ConcurrentTaskExecutor`:作为`Executor`接口的...

    Spring小例子项目源码

    2. **ExecutorService和ThreadPoolExecutor**:Java并发框架中的重要工具,可以管理和控制线程池,提高系统资源利用率。 3. **Future和Callable**:Callable接口用于创建带返回值的线程,Future接口用于获取线程...

    maven管理的Spring多线程任务demo

    在Spring中,我们可以使用`ThreadPoolTaskExecutor`,这是Spring对`ThreadPoolExecutor`的封装,提供了更便捷的配置方式。 为了在Spring中使用`ThreadPoolTaskExecutor`,我们需要在配置类中声明一个bean,如下所示...

    spring 线程池实例

    在Java编程中,Spring框架提供了一种优雅的方式来管理和执行异步任务,这就是Spring的线程池。线程池是多线程编程中的一个重要概念,它能够有效地管理并发任务的执行,提高系统的性能和效率。本实例将深入探讨Spring...

    framework-analysis:对使用Hibernate出现的问题进行分析;Spring、MyBatis、AQS、ThreadPoolExecutor、CountDownLatch核心源码分析

    于是乎到现在的Hibernate、MyBatis、Spring、Spring MVC、AQS、ThreadPoolExecutor、CountDownLatch使用场景和核心源码分析。 感觉自己还是真的菜鸡,有太多框架的底层实现都不怎么了解。 当山头被一座一座攻克时,...

    使用线程池ThreadPoolExecutor 抓取论坛帖子列表

    在实际应用中,我们可能还需要关注线程池的监控和调优,例如通过JMX或Spring的`ThreadPoolTaskExecutor`进行监控,以及根据系统负载动态调整线程池参数。 至于提到的"工具"标签,可能指的是使用一些工具库如Apache ...

    Spring3.2.6定时任务+线程池.docx

    &lt;bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy"/&gt; ``` 1. **核心线程数** (`corePoolSize`): 表示线程池中保持的最小线程数量,即使这些线程处于空闲状态也会被保留下来。在这个例子...

    Spring Boot 线程池的创建、@Async 配置步骤及注意事项.docx

    在Spring Boot应用中,使用线程池和异步处理是提高系统并发性能和响应速度的重要手段。`@Async`注解是Spring提供的一个特性,用于标记方法为异步执行,这样可以避免主线程等待耗时的操作,提高系统效率。本文将详细...

    spring 微服务相关框架学习。以及记录 jvm 调优 数据监控 并发控制-spring-frame.zip

    此外,Java并发库中的ThreadPoolExecutor允许自定义线程池参数,以适应不同的并发场景,防止资源过度消耗。 总的来说,理解并熟练运用Spring微服务框架、JVM调优技巧、数据监控工具以及并发控制策略,是成为一名...

    多线程及spring相关面试专题及答案.zip

    6. **线程池**:Java的ExecutorService接口和ThreadPoolExecutor类提供了线程池的管理,通过线程池可以有效地控制并发数量,提高系统效率并减少资源消耗。 7. **并发工具类**:Java并发包(java.util.concurrent)...

    Java Spring多线程demo代码

    首先,Spring提供了`ThreadPoolTaskExecutor`,这是一个基于Java的`ThreadPoolExecutor`实现的任务执行器。开发者可以通过配置bean来定制线程池参数,如核心线程数、最大线程数、队列大小等,以适应不同场景下的并发...

    spring timer

    `ThreadPoolTaskScheduler`是其常见实现,它基于`ThreadPoolExecutor`。 3. **CronTrigger**: 在Spring中,我们经常用到`@Scheduled`注解配合cron表达式来实现按时间触发的任务。cron表达式是一种强大的定时表达...

    关于Spring中@Async注解使用

    为了避免这个问题,Spring 提供了 ThreadPoolTaskExecutor,这个类是对 java.util.concurrent.ThreadPoolExecutor 的包装,提供了自定义配置线程池的功能。 自定义线程池需要了解几个主要的概念,例如核心线程数量...

    spring_thread_demo.rar

    `ThreadPoolTaskExecutor`是Spring提供的一个线程池实现,它是基于Java的`java.util.concurrent.ThreadPoolExecutor`类。开发者可以通过配置线程池的核心线程数、最大线程数、线程存活时间、工作队列容量等参数,以...

    Spring线程池ThreadPoolTaskExecutor配置详情

    &lt;bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /&gt; ``` 在上面的配置中,我们定义了一个名为taskExecutor的Bean,class为ThreadPoolTaskExecutor。然后,我们通过property元素设置了...

    spring TaskExecutor.docx

    4. **ThreadPoolTaskExecutor**:基于Java 5的ThreadPoolExecutor,是Java 5环境下最常用的实现,允许配置线程池参数。 5. **SimpleThreadPoolTaskExecutor**:基于Quartz的SimpleThreadPool,适合Quartz和其他非...

    在spring boot中使用java线程池ExecutorService的讲解

    在 Spring Boot 中使用 Java 线程池 ExecutorService 的讲解 Spring Boot 作为一个流行的 Java 框架,提供了许多便捷的功能来帮助开发者快速构建应用程序。其中之一就是使用 Java 线程池 ExecutorService 来管理...

    spring boot2.0实现优雅停机的方法

    Spring Boot 2.0 实现优雅停机的方法 Spring Boot 2.0 中实现优雅停机的方法主要是通过配置 Tomcat 容器和实现 GracefulShutdown 类来实现的。优雅停机是指在关闭应用程序时,先停止接收新的请求,然后等待所有...

Global site tag (gtag.js) - Google Analytics