zoukankan      html  css  js  c++  java
  • springboot 整合线程池(通俗易懂)

    废话少说,直接上代码

     
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.task.AsyncTaskExecutor;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    import java.util.concurrent.*;
    
    @Configuration
    @EnableAsync
    public class SpringAsyncConfig {
        
        @Bean("taskExecutor")
        public Executor asyncServiceExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            // 设置核心线程数
            executor.setCorePoolSize(5);
            // 设置最大线程数
            executor.setMaxPoolSize(20);
            //配置队列大小
            executor.setQueueCapacity(Integer.MAX_VALUE);
            // 设置线程活跃时间(秒)
            executor.setKeepAliveSeconds(60);
            // 设置默认线程名称
            executor.setThreadNamePrefix("获取旺旺信息");
            // 等待所有任务结束后再关闭线程池
            executor.setWaitForTasksToCompleteOnShutdown(true);
            //执行初始化
            executor.initialize();
            return executor;
        }
    }

    controller层

    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");
        }
    }

    service

    public interface AsyncService {
     
        /**
         * 执行异步任务
         */
        void executeAsync();
     
    }

    serviceImpl

    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;
     
    
    @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和@EnableAsync要结合使用,才能发挥异步的效果

    建议把所有带有@Async的方法都放到同一个类里,不然很容易出现循环依赖的问题

  • 相关阅读:
    俩人搞对象,山上骑马
    历史不会偏袒任何一个缺乏正义、良知的人。
    力量和对力量的控制
    超级管理员
    电信F412
    prim算法
    Maven pom.xml配置详解
    PorterDuffXfermode的用法
    使用MaskFilter
    Android drawText获取text宽度的三种方式
  • 原文地址:https://www.cnblogs.com/panchanggui/p/14792270.html
Copyright © 2011-2022 走看看