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

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

项目结构
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:邮件内容

猜你喜欢

转载自blog.csdn.net/PYouLing123456789/article/details/50923036