1 Springboot与线程安全
1.1 MVC
毫无疑问,Controller默认是单例的,在多线程情况下,如果Controller是有状态的,则会导致线程安全问题,可以通过设置scope或将实例变量改为Treadlocal处理。
1.2 Async
在异步任务中使用Context获取单例Service
@Scheduled(cron = "0/5 * * * * ?")
@Async
public void identifyAnnouncement() {
SingltonService singltonService = ApplicationContext.getSingltonService ();
singltonService .doWork();
}
按理说,这个SingltonService
如果也是有状态的,也会导致线程安全。
但是在模拟测试中,并未发现问题并且打印singltonService
确认是单例无疑。
网友评论