zoukankan      html  css  js  c++  java
  • SpringBoot启动多线程

    新建一个线程池的配置类,需要被spring扫描到。

    @Configuration  
    @EnableAsync  
    public class ThreadExecutorConfig {  
      
        @Bean  
        public Executor executor() {  
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();  
            executor.setCorePoolSize(20);//线程池维护线程的最少数量  
            executor.setMaxPoolSize(50);//线程池维护线程的最大数量  
            executor.setQueueCapacity(15);//缓存队列  
            executor.setThreadNamePrefix("ssmsExecutor-");  
            /** 
             * 对拒绝task的处理策略 
             rejection-policy:当pool已经达到max size的时候,如何处理新任务 
             CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行 
             */  
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());  
            executor.setKeepAliveSeconds(60);//允许的空闲时间  
            executor.initialize();  
            return executor;  
        }  
      
    } 
    

      添加一个普通类,里面编写需要执行的方法,方法加上@Async注解,调用方法时自动启动线程。

    @Component  
    public class BmtOrderThread {  
          
        @Async  
        public Future<Map<String,Object>> test1() {  
            Map<String,Object> result=new HashMap<String,Object>();  
            return new AsyncResult<>(result);  
        }  
          
        @Async  
        public void test2() {  
            System.out.println("hello");  
        }  
    }
    

      调用有返回值的线程方法:

    public static void main(String[] args) {      
        List<Future<Map<String,Object>>> futures = new ArrayList<>();//存线程的返回结果  
          
        //以下调用会启动线程进行执行,多线程并发     
        Future<Map<String,Object>> res1=bmtOrderThread.test1();  
        futures.add(res1);  
        Future<Map<String,Object>> res2=bmtOrderThread.test1();  
        futures.add(res2);  
          
        //会等待所有线程都执行结束,拿到结果   
        try {  
            for(Future future:futures) {  
                Object obj=future.get();  
                Map<String,Object> result=(Map<String,Object>)obj;  
            }  
        } catch(Exception e) {  
            e.printStackTrace();  
        }  
    }  
    

      调用无返回值的线程方法:

    public static void main(String[] args) {  
        //以下方法会启动多线程,并发执行  
        bmtOrderThread.test1();  
        bmtOrderThread.test1();  
        bmtOrderThread.test1();  
    } 
    

      

    参考的博客:

    https://blog.csdn.net/qq_39385706/article/details/79365849

    https://blog.csdn.net/weixin_38399962/article/details/82146480

    https://www.cnblogs.com/guyezhai/p/5776357.html

  • 相关阅读:
    [译]WCF RIA Services中的集合(2)
    Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)
    记录来敦煌一周的情况
    Silverlight通过MVVM实现多语言实时切换(含源代码)
    [译]WCF RIA Services中的集合(1)
    Silverlight Client←→Server数据同步备忘代码
    Siverlight5新功能/改进总结
    Expression Blend 5 Preview For Silverlight5 RC已发布
    你应该知道的,那些未在Silverlight5Beta中出现的特性
    .NET数据库编程求索之路1.引子
  • 原文地址:https://www.cnblogs.com/DreamFather/p/11327491.html
Copyright © 2011-2022 走看看