多线程访问时,对象的三种创建方式导致出现的不一样的并发问题.
第一种方式:
第二种方式:
第三种方式:
第一种方式,我知道是因为resultInfo是成员变量的问题,所以会出现多线程访问的并发问题.
第三种方式,因为resultInfo是局部变量所以没有并发问题.
那第二种方式呢?我在方法中对resultInfo变量重新new了啊,那应该每次访问该方法时resultInfo都是一个新的对象的才对啊,不应该会有并发问题吧??
是不是我哪里理解错了,请教这个问题.
多线程访问时,对象的三种创建方式导致出现的不一样的并发问题.
第一种方式:
第二种方式:
第三种方式:
第一种方式,我知道是因为resultInfo是成员变量的问题,所以会出现多线程访问的并发问题.
第三种方式,因为resultInfo是局部变量所以没有并发问题.
那第二种方式呢?我在方法中对resultInfo变量重新new了啊,那应该每次访问该方法时resultInfo都是一个新的对象的才对啊,不应该会有并发问题吧??
是不是我哪里理解错了,请教这个问题.
注意到题主类名上注释掉了的@Scope("prototype")
,想必清楚controller是默认单例的了,那么很明显controller的成员变量的引用只可能有一个值。那就正如上面所说,A线程先维护了resultInfo为a,B线程后把resultInfo改成了b,所以A线程再使用成员变量的话就会得到b的引用。
15 回答8.4k 阅读
8 回答6.3k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
先说点题外话:你的那个@Autowired注解是干嘛用的?为什么这种对象要让Spring来管理呢,我是很不能理解。。。题主能否稍微解释下?
回到正题,题主还是没搞懂Java中的值传递。对于同一个变量resultInfo,