zoukankan      html  css  js  c++  java
  • SpringBoot 实现多线程

    ThreadPoolTaskConfig.java

    /**
     * 默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,
     * 当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
     * 当队列满了,就继续创建线程,当线程数量大于等于maxPoolSize后,开始使用拒绝策略拒绝
     *
     * @author Jensen Zhan
     */
    @Configuration
    @EnableAsync
    public class ThreadPoolTaskConfig {
    
        /**
         * 默认线程数
         */
        private static final int CORE_POOL_SIZE = 20;
        /**
         * 最大线程数
         */
        private static final int MAX_POOL_SIZE = 100;
        /**
         * 允许线程空闲时间(单位:默认为秒)
         */
        private static final int KEEP_ALIVE_TIME = 10;
        /**
         * 缓冲队列大小
         */
        private static final int QUEUE_CAPACITY = 200;
        /**
         * 线程池名前缀
         */
        private static final String THREAD_NAME_PREFIX = "Async-Service-";
    
        @Bean
        public ThreadPoolTaskExecutor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(CORE_POOL_SIZE);
            executor.setMaxPoolSize(MAX_POOL_SIZE);
            executor.setQueueCapacity(QUEUE_CAPACITY);
            executor.setKeepAliveSeconds(KEEP_ALIVE_TIME);
            executor.setThreadNamePrefix(THREAD_NAME_PREFIX);
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            executor.initialize();
            return executor;
        }
    
    }

    ThreadService.java

    /**
     * @author Jensen Zhan
     */
    @Service
    public class ThreadService {
        @Async
        public void sendMessage1() {
            for (int i = 0; i < 10000; i++) {
                Thread thread = Thread.currentThread();
                System.out.println(thread.getName());
            }
        }
    
        @Async
        public void sendMessage2() {
            for (int i = 0; i < 10000; i++) {
                Thread thread = Thread.currentThread();
                System.out.println(thread.getName());
            }
        }
    }

    OpenThread.java

    /**
     * @author Jensen Zhan
     */
    @Component
    public class OpenThread implements ApplicationRunner {
    
        @Autowired
        private ThreadService threadService;
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            threadService.sendMessage1();
            threadService.sendMessage2();
            System.out.println("end ...");
        }
    }

    然后直接运行application

  • 相关阅读:

    c#常用的基础概念
    Visual Studio2010+SOS.dll调试入门 摘自 http://www.cnblogs.com/luminji/archive/2011/01/27/1946217.html
    优化数据库之前的10个问题
    js数组清空的两种方式
    我的资源(网站, 工具)
    iis使用十大原则
    SQL2005分页存储过程
    温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
    无法获得数据库 'model' 上的排他锁 网上搜索结果 IT
  • 原文地址:https://www.cnblogs.com/zhanzhuang/p/13223171.html
Copyright © 2011-2022 走看看