ThreadService
package com.konglingfu.service;
public interface ThreadService extends Runnable{
public void setParam(String emailName,String context);
}
ThreadServiceImpl
package com.konglingfu.service.impl;
import com.konglingfu.service.ThreadService;
public class ThreadServiceImpl implements ThreadService{
private String emailName;
private String context;
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public String getEmailName() {
return emailName;
}
public void setEmailName(String emailName) {
this.emailName = emailName;
}
@Override
public void run() {
System.out.println("发送邮件emailName:"+emailName +"context:"+context );
}
/**
* 设置参数
*/
@Override
public void setParam(String emailName, String context) {
this.emailName = emailName;
this.context = context;
}
}
ThreadUtil
package com.konglingfu.util;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/**
* 多线程工具类
*/
public class ThreadUtil {
private static ThreadPoolTaskExecutor poolTaskExecutor;
static {
init();
}
private ThreadUtil() {// 不允许实例化工具类
}
private static void init() {
poolTaskExecutor = new ThreadPoolTaskExecutor();
// 线程池所使用的缓冲队列
poolTaskExecutor.setQueueCapacity(200);
// 线程池维护线程的最少数量(核心线程数)
poolTaskExecutor.setCorePoolSize(5);
// 线程池维护线程的最大数量
poolTaskExecutor.setMaxPoolSize(100);
// 线程池维护线程所允许的空闲时间
poolTaskExecutor.setKeepAliveSeconds(30000);
poolTaskExecutor.initialize();
}
/**
* 执行线程
*
* @param runnable
*/
public static void execute(Runnable runnable) {
if (poolTaskExecutor == null) {
init();
}
poolTaskExecutor.execute(runnable);
}
}
applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<bean id="threadService"
class="com.konglingfu.service.impl.ThreadServiceImpl" >
</bean>
</beans>
applicationContext2.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 线程池维护线程的最少数量 -->
<property name="corePoolSize" value="3" />
<!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="200" />
<!-- 线程池维护线程的最大数量 -->
<property name="maxPoolSize" value="5" />
<!-- 线程池所使用的缓冲队列 -->
<property name="queueCapacity" value="25" />
</bean>
<bean id="threadService"
class="com.konglingfu.service.impl.ThreadServiceImpl" >
</bean>
</beans>
ThreadTest
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.konglingfu.service.ThreadService;
import com.konglingfu.util.ThreadUtil;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class ThreadTest extends AbstractJUnit4SpringContextTests {
@Autowired
private ThreadService threadService;
@Test
public void testThreadTool(){
threadService.setParam("[email protected]", "邮件内容");
ThreadUtil.execute(threadService);
}
}
ThreadTest2
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.konglingfu.service.ThreadService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext2.xml")
public class ThreadTest2 extends AbstractJUnit4SpringContextTests {
@Autowired
private ThreadService threadService;
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
@Test
public void testThreadTool(){
threadService.setParam("[email protected]", "邮件内容");
taskExecutor.execute(threadService);
}
}
运行结果
发送邮件emailName:593036108@qq.comcontext:邮件内容