spring 线程池 分析 加 实例

实现思路

1.在项目中配置spring 的 threadPool 线程池 使用 Spring-Config.xml文件

2.在Spring-Config.xml 文件中配置相对应的线程内容

3.在java 中引用这个Spring-Config.xml 文件

4.在java 控制层 or 其他层调用 这个 Spring-Config.xml 文件 

5.在servlet 容器也就是服务器tomcat 或其他服务器启动的时候就可以直接调用spring 然后spring加载控制层类,再然后 spring中的类启动Spring-Config.xml的配置并调用

6. 调用到Spring-Config.xml 配置中的内容后在方法中直接使用线程池

7.ok

 

生命周期 :

跟随 服务器启动 开始 到 服务器关闭 结束

 

一个简单的实例如下(一个 java Class and Spring Config .xml File):

目录结构

spring 线程池 分析 加 实例

java:

package com.prarme.ctr;

import javax.servlet.http.HttpServletRequest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/testCtr")
public class TestCtr {
	//跟随servlet 一起启动
	ApplicationContext ctx = new ClassPathXmlApplicationContext("resources/Spring-Config.xml");
	ThreadPoolTaskExecutor taskExecutor = (ThreadPoolTaskExecutor) ctx.getBean("threadPools");

	@RequestMapping("/ta")
	@ResponseBody
	public void queryisrole(HttpServletRequest request) throws InterruptedException {
		String ret = request.getParameter("pas");
		taskExecutor.execute(abc("hehe" + ret));
	}
	
	//执行任务
	private static Runnable abc(String str) {
		final String strc = str;
		return new Runnable() {
			@Override
			public void run() {
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(strc);
			}

		};
	}

	//可以用这个方法测试也可以使用上边的那个客户端方式访问测试
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"resources/Spring-Config.xml");
		ThreadPoolTaskExecutor taskExecutor = (ThreadPoolTaskExecutor) ctx
				.getBean("threadPools");
		for (int i = 0; i < 30; i++) {
			taskExecutor.execute(abc("hehe" + i));
		}
	}
}

xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"
     default-autowire="byName">
     <bean  id="threadPools"
          class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
           <!-- 核心线程数 -->
           <property name="corePoolSize" value="10" />
           <!-- 最大线程数 -->
           <property name="maxPoolSize" value="20" />
           <!-- 队列最大长度 >=mainExecutor.maxSize -->
           <property name="queueCapacity" value="500" />
           <!-- 线程池维护线程所允许的空闲时间(秒) -->
           <property name="keepAliveSeconds" value="60" />
           <!-- 线程池对拒绝任务(无线程可用)的处理策略,使用默认的AbortPolicy -->
           <property name="rejectedExecutionHandler">
                <bean class="java.util.concurrent.ThreadPoolExecutor$AbortPolicy" />
           </property>
     </bean>
</beans>

总结: 

直接配置上这俩个 然后启动服务器 会spring 会初始化直接加载上线程池配置文件