答案:绝不可能是线程安全的,不是线程安全的,也不绝对是线程不安全的
Spring容器中的bean可以分为5个范围
- singleton:默认,每个容器中只有一个bean的实例
- prototype:为每一个bean请求提供一个实例
以下三种99.99%不用
- request:为每一个网络请求创建一个实例,在请求完成后,bean会失效并被垃圾回收器回收
- session:确保每个session中有一个bean的实例,在session过期后,bean会随之消失
- gloal-session
Tomcat中可能多个线程去请求同一个bean对象实例(例如调用同一个Controller),因为spring默认创建的bean是singleton的,都是线程不安全的。如果在spring的Service或是Controller中没放什么实例变量,那么这个时候就没什么问题,最终的效果可能是多个线程并发去访问数据库(正常的逻辑是在业务代码中访问数据库)
如果单实例的变量放的是例如ConcurrentHashMap这种线程安全的数据结构,那么多线程并发访问的话,是线程安全的。
@Service
public class MyServiceImpl implements MyService{
public void doService(){
//执行方法
}
}
&