zoukankan      html  css  js  c++  java
  • Spring Boot ThreadPoolTaskExecutor使用

    • 初始化线程池
    @Configuration
    @EnableAsync
    public class TaskExecutorConfiguration implements AsyncConfigurer {
    
        @Override
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
            taskExecutor.setKeepAliveSeconds(1000);// 空闲时间
            taskExecutor.setCorePoolSize(5);// 线程池大小
            taskExecutor.setMaxPoolSize(10);// 线程池最大线程数
            taskExecutor.setQueueCapacity(25);// 最大等待任务数
            taskExecutor.initialize();
            return taskExecutor;
        }
    
        @Override
        public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
            return null;
        }
    
    }
    
    • corePoolSize 线程池维护线程的最少数量
    • keepAliveSeconds 线程池维护线程所允许的空闲时间
    • maxPoolSize 线程池维护线程的最大数量
    • queueCapacity 线程池所使用的缓冲队列

    当一个任务通过execute(Runnable)方法欲添加到线程池时:

    • 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
    • 如果此时线程池中的数量等于 corePoolSize,但是缓冲队列workQueue未满,那么任务被放入缓冲队列。
    • 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
    • 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。
    • 当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。
    • 创建异步任务类
    @Slf4j
    @Service("asyncService")
    public class AsyncService {
    
        @Async
        public void executorAsyncTask(String name){
            log.info("执行异步:{}" ,name);
        }
    }
    

    @Slf4j是lombok注解,自动注入log对象

    • 测试类
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringBootTempleteApplicationTests {
        
        @Autowired
        private AsyncService asyncService;
    
        @Test
        public void testThread() {
            for(int i=0; i < 10;i++) {
                asyncService.executorAsyncTask(i + "");
            }
        }
    }
    

    方式二

    
    @Service
    public class Test{
       @Autowired
        private ThreadPoolTaskExecutor threadPoolTaskExecutor;
     
     threadPoolTaskExecutor.submit(() -> {
                    dosomething();
                }).get();
            } catch (InterruptedException | ExecutionException e) {
                throw e;
            }
    }
    • 输出

    执行异步:0
    执行异步:5
    执行异步:6
    执行异步:7
    执行异步:8
    执行异步:9
    执行异步:3
    执行异步:2
    执行异步:4
    执行异步:1

    正因为当初对未来做了太多的憧憬,所以对现在的自己尤其失望。生命中曾经有过的所有灿烂,终究都需要用寂寞来偿还。
  • 相关阅读:
    Mac电脑maven安装与配置
    解决Mac OS X中IDEA启动慢以及debug卡死问题
    如何在Mac上启用root用户或更改root密码
    mac文本编辑器软件,五大适用于Mac修订的文本编辑器,nodepad++替代软件
    mac系统到10.14以上,navicat无法打开,一直显示已损坏解决办法
    mac苹果电脑AppleID注册或者登录appstore时提示:您没有完整填写表格,请输入您的出生年份的解决方法
    mac苹果电脑使用相关,开发环境配置指南(持续更新)
    bitmap to base64
    Multiple actions were found that match the request in Web Api
    vue get attribute value
  • 原文地址:https://www.cnblogs.com/candlia/p/11919947.html
Copyright © 2011-2022 走看看