spring默认单例,如何解决并发问题的

wj13314 java开发  2017-11-02 02:34:02
用spring的人都知道,它是默认单例的。在web应用中,每次用户访问,都是一个线程,如果同时有20个用户访问同一个方法,这个方法又是单例的,那么他同时只存在一个对象。是不是代表着20个用户访问的都是同一个对象。但是每个用户看到的又不是同样的内容。求大神解答?
...全文
1691 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
weixin_43490664 2019-07-23
不然方法的参数和里面的变量有什么意义,sping注入的对象默认都是单例的,你可以打印出来发现,那些被注入的对象后面的hashCode值都是一样的.每一个用户的请求,spring都会调用同一个Bean里面对应url的方法.
  • 打赏
  • 举报
回复
LiHuaxin_BJ 2018-08-06
spring中的bean默认是单例的,通常对单例进行多线程访问时,为了线程安全而采用同步机制,以时间换空间的方式,而Spring中是利用ThreadLocal来以空间换取时间,为每一个线程提供变量副本,来保证变量副本对于某一线程都是线程安全的
  • 打赏
  • 举报
回复
Java技术栈 2017-11-02
引用 2 楼 wj13314 的回复:
[quote=引用 1 楼 youanyyou 的回复:] 虽然spring对象是单例的,但类里面方法对每个线程来说都是独立运行的,不存在多线程问题,只有成员变量有多线程问题,所以方法里面如果有用到成员变量就要考虑用安全的数据结构,不知道你现在明白没。
可以理解为方法都是独立的,每个用户在访问的时候单独开辟了空间,而成员变量却是共有的,所有用户都是调用的同一个。 那在调用到service的时候,在service里面有成员变量,是否会有影响?还是只是指的controller里面的方法?[/quote] Spring默认都是单例,所以只要是单例成员变量就有影响 。
  • 打赏
  • 举报
回复
wj13314 2017-11-02
引用 1 楼 youanyyou 的回复:
虽然spring对象是单例的,但类里面方法对每个线程来说都是独立运行的,不存在多线程问题,只有成员变量有多线程问题,所以方法里面如果有用到成员变量就要考虑用安全的数据结构,不知道你现在明白没。
可以理解为方法都是独立的,每个用户在访问的时候单独开辟了空间,而成员变量却是共有的,所有用户都是调用的同一个。 那在调用到service的时候,在service里面有成员变量,是否会有影响?还是只是指的controller里面的方法?
  • 打赏
  • 举报
回复
Java技术栈 2017-11-02
虽然spring对象是单例的,但类里面方法对每个线程来说都是独立运行的,不存在多线程问题,只有成员变量有多线程问题,所以方法里面如果有用到成员变量就要考虑用安全的数据结构,不知道你现在明白没。
  • 打赏
  • 举报
回复
相关推荐
发帖
Web 开发
加入

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2017-11-02 02:34
社区公告
暂无公告