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):
目录结构
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 会初始化直接加载上线程池配置文件