温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

关于spring boot多线程的案例分析

发布时间:2020-07-06 10:44:59 来源:亿速云 阅读:376 作者:清晨 栏目:开发技术

这篇文章主要介绍关于spring boot多线程的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

一、配置类

package com.cenobitor.taskxecutor.config; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; @Configuration @EnableAsync public class TaskExecutorConfig implements AsyncConfigurer { @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; } }

1、利用@EnableAsync注解开启异步任务支持

2、配置类实现AsyncConfigurer接口并重写getAsyncExecutor方法,并返回一个ThreadPoolTaskExecutor,这样我们就获得了一个基于线程池TaskExecutor。

二、任务执行类

package com.cenobitor.taskxecutor.taskservice; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @Service public class AsyncTaskService { @Async public void excuteAsyncTask(Integer i){ System.out.println("异步执行任务:"+i); } @Async public void excuteAsyncTaskPlus(Integer i){ System.out.println("异步执行任务+1:"+(i+1)); } }

  通过@Async注解表明该方法是异步方法,如果注解在类级别,则表明该类所有的方法都是异步方法,而这里的方法自动被注入使用ThreadPoolTaskExecutor作为TaskExecutor。

  如果在异步方法所在类中调用异步方法,将会失效;

三、运行

package com.cenobitor.taskxecutor; import com.cenobitor.taskxecutor.taskservice.AsyncTaskService; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskxecutorApplication.class); AsyncTaskService asyncTaskService = context.getBean(AsyncTaskService.class); for (int i = 0; i < 10; i++) { asyncTaskService.excuteAsyncTask(i); asyncTaskService.excuteAsyncTaskPlus(i); } context.close(); } }

运行结果:

异步执行任务:0
异步执行任务+1:1
异步执行任务:1
异步执行任务+1:2
异步执行任务:2
异步执行任务:3
异步执行任务:5
异步执行任务+1:6
异步执行任务:6
异步执行任务+1:7
异步执行任务:7
异步执行任务+1:8
异步执行任务:8
异步执行任务+1:9
异步执行任务:9
异步执行任务+1:10
异步执行任务+1:3
异步执行任务:4
异步执行任务+1:5
异步执行任务+1:4

以上是关于spring boot多线程的案例分析的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI