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

wj13314 2017-11-02 02:34:02
用spring的人都知道,它是默认单例的。在web应用中,每次用户访问,都是一个线程,如果同时有20个用户访问同一个方法,这个方法又是单例的,那么他同时只存在一个对象。是不是代表着20个用户访问的都是同一个对象。但是每个用户看到的又不是同样的内容。求大神解答?
...全文
2257 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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对象是单例的,但类里面方法对每个线程来说都是独立运行的,不存在多线程问题,只有成员变量有多线程问题,所以方法里面如果有用到成员变量就要考虑用安全的数据结构,不知道你现在明白没。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧