spring4+ThreadPoolTaskExecutor创建线程 两种方式发送邮件

来源:互联网 发布:淘宝密码忘了怎么办 编辑:程序博客网 时间:2024/05/19 20:22

百度云代码下载地址包含测试用例 :点击后跳转

项目结构
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("593036108@qq.com", "邮件内容");        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("593036108@qq.com", "邮件内容");        taskExecutor.execute(threadService);    }}

运行结果

发送邮件emailName:593036108@qq.comcontext:邮件内容
0 0
原创粉丝点击