SpringBoot 自动注入与多线程

本文探讨了在SpringBoot框架中实现多线程的两种主要方法:一是通过集成Thread或实现Runnable接口,并结合@Component和@Scope注解确保线程对象的正确注入;二是使用SpringBoot自带的@Async注解简化多线程编程。文章详细介绍了如何避免自动注入失败及异常报错,确保多线程功能的顺利实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在SpringBoot中可以通过传统的集成Thread或者实现Runnable接口实现多线程,也可以使用SpringBoot中的提供的@Async注解来实现多线程。使用不当都会出现自动注入的失败或者异常报错从而影响功能实现。下面对在SpringBoot中的多线程实现的两种方式做一个记录。

1.集成Thread或实现Runnable接口来实现多线程

      一搜类似标题网上都是说多线程下不能自动注入,需要一个实现ApplicationContextAware的工具类来从spring容器中获取线程中需要的bean,然后在线程的构造方法中完成赋值相当于注入。我就有些纳闷,你不用spring注入的线程对象当然不能自动注入线程内的对象了。为什么不用获取上下文中bean的工具类去获取线程对象呢?感觉这才更加合理。

      所以我觉得正确的操作应该是,用

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

两个注解来修饰线程,让这个线程成为原型模式,成为原型模式的线程,在每次注入或者从spring上下文环境中获取对象时都会新建对象并返回。于是

//文件创建的线程已修改为原型模式此处注入两个
@Autowired
CreateFileQueue createFileQueue;
@Autowired
CreateFileQueue createFileQueue2;

这样就有了两个对象,

//启动文件新建的线程
Thread threadCreate=createFileQueue;
Thread threadCreate2=createFileQueue2;
threadCreate.start();
threadCreate2.start();

 

这样就启动了两个可以自动注入的线程。非常合乎逻辑。

 

若线程更多。可以用for循环从Spring上下文中获取:

利用 实现ApplicationContextAware接口 的工具类来操作Spring的上下文环境获取Spring管理的Bean实例,在用Scope限定为原型模式的bean对象,每次获取都是是个新的对象。

具体代码可参考:

https://www.jianshu.com/p/3cd2d4e73eb7

转载于简书大佬。

 

2.通过SpringBoot自带的@Async注解来实现多线程

@Async注解是springBoot

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值