springboot 整合线程池

一. 简介

二. 代码

2.1 线程池配置类

package com.yzx.caasscs.configuration.thread;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.ThreadPoolExecutor;

/**
 * @author duxuebo
 * @date 2018/10/12
 * @description 线程池配置类
 */
@Configuration
@EnableAsync
public class ThreadPoolConfig {

    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 设置核心线程数
        executor.setCorePoolSize(2);
        // 设置最大线程数
        executor.setMaxPoolSize(2);
        // 设置队列容量
        executor.setQueueCapacity(2);
        // 设置线程活跃时间(秒)
        executor.setKeepAliveSeconds(300);
        // 设置默认线程名称
        executor.setThreadNamePrefix("thread-");
        // 设置拒绝策略rejection-policy:当pool已经达到max size的时候,如何处理新任务 CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        // 等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        return executor;
    }



}

三. 测试

3.1 controller

package com.yzx.caasscs.controller.Thread;

import com.yzx.caasscs.controller.BaseController;
import com.yzx.caasscs.service.Thread.AsyncService;
import com.yzx.caasscs.vo.ResultVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author qjwyss
 * @date 2018/10/12
 * @description
 */
@RestController
public class ThreadController extends BaseController {

    private static final Logger logger = LoggerFactory.getLogger(ThreadController.class);

    @Autowired
    private AsyncService asyncService;

    @GetMapping("/sss")
    public ResultVO<Void> sss(){

        //调用service层的任务
        asyncService.executeAsync();

        return ResultVO.getSuccess("OK");
    }


}

3.2 service

package com.yzx.caasscs.service.Thread;

/**
 * @author qjwyss
 * @date 2018/10/12
 * @description
 */
public interface AsyncService {

    /**
     * 执行异步任务
     */
    void executeAsync();

}

3.3 serviceImpl

package com.yzx.caasscs.service.impl.Thread;

import com.yzx.caasscs.service.Thread.AsyncService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
 * @author qjwyss
 * @date 2018/10/12
 * @description
 */
@Service
public class AsyncServiceImpl implements AsyncService {

    private static final Logger logger = LoggerFactory.getLogger(AsyncServiceImpl.class);


    @Async("taskExecutor")
    @Override
    public void executeAsync() {
        logger.info("start executeAsync");
        try {
            System.out.println("当前运行的线程名称:" + Thread.currentThread().getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.info("end executeAsync");
    }

}

注: 直接使用@Async注解,并声明线程池,即可使用多线程;

猜你喜欢

转载自blog.csdn.net/qq_35206261/article/details/83037320