spring -多线程

Spring 通过 "任务执行器" (TaskExecutor) 来实现多线程和并发编程 , 一般使用ThreadPoolTaskExecutor 可以实现一个基于线程池的 TaskExecutor 。
而实际开发任务中一般是非阻碍的,就是异步的,所以我们要在配置类中通过 @EnableAsync 开启对异步任务的支持 , 并通过在实际执行的 Bean 的方法中使用 @Async 注解来声明他是一个一部任务

配置类

@Configuration
@ComponentScan("com.wangzai.springboot.thread.async")
//开启异步支持
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {

    //实现AsyncConfigurer 并重写getAsyncExecutor返回一个ThreadPoolTaskExecutor 这样我们就获得了一个基于线程池TaskExecutor
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(5);
        taskExecutor.setMaxPoolSize(10);
        taskExecutor.setQueueCapacity(25);
        taskExecutor.initialize();
        return taskExecutor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

执行类

@Service
public class AsyncTaskService {
    
    //通过@Async表明该方法是一个异步方法,如果注解在类级别,则表明该类所有的方法都是异步方法,这里的方法自动被注入使用ThreadPoolTaskExecutor 作为 TaskExecutor。
    @Async
    public void executeAsyncTask(Integer i) {
        System.out.println("执行异步任务" + i);
    }
    
    
    @Async
    public void executeAsyncTaskPlus(Integer i ) {
        System.out.println("执行任务 + 1" + (i+1));
    }

}

启动器

public class ApplicationAsync {
    public static void main(String[] args) {
        //我们加载配置 , 就是我们刚才配置了异步和Bean的类 ,这样我们异步启动了 
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
        //我们这里用刚才获取的Context来获取AsyncTask 这个时候异步配置已经开启啦~
        AsyncTaskService asyncTaskService = context.getBean(AsyncTaskService.class);
        
        for (int i = 0 ; i < 10 ; i ++) {
            asyncTaskService.executeAsyncTask(i);
            asyncTaskService.executeAsyncTaskPlus(i);
        }
        context.close();
    }
}

添加了异步注解,我们在执行的时候 for () 循环10次 , 那就是20个并发,效果:
执行任务 +1 :1
执行异步任务1
执行异步任务3
执行任务 +1 :4
执行异步任务4
执行任务 +1 :5
执行异步任务5
执行任务 +1 :6
执行异步任务6
执行任务 +1 :7
执行异步任务7
执行任务 +1 :8
执行异步任务8
执行任务 +1 :9
执行异步任务9
执行任务 +1 :10
执行异步任务2
执行任务 +1 :2
执行异步任务0
执行任务 +1 :3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,947评论 6 342
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,362评论 11 349
  • 文 | cavie 有人说,读史可以让人明智。 个人愚见(如下): 真的信史,往往教给了我们一些哲思的经验教训,读...
    cavie阅读 455评论 1 1
  • 辉子是我的发小。瘦瘦的,憨厚但帅气。 爱笑。脾气特好。小时候偷玉米马铃薯,攒着小钱去游戏厅。基本做坏事都带着他。好...
    一個写信人阅读 328评论 3 3