spring bean 线程安全问题,95.spring 中的 bean 是线程安全的吗?
春天中的豆是线程安全的吗?
写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用
Spring 不保证 bean 的线程安全。
默认 spring 容器中的 bean 是单例的。当单例中存在竞态条件,即有线程安全问题。如下面的例子
计数类
包熊警官。面试。线程安全;
/**
* 计数类
* @作者康斯特雄
* @日期2019-07-16 14:35:40
*/
公共类计数器{
private int count=0;
public void addAndPrint() {
尝试{
线程.睡眠(十);
} catch (InterruptedException e) {
e。printstacktrace();
}
系统。出去。println(计数);
}
}spring 配置文件
?可扩展标记语言版本=1.0 编码=UTF八号?
豆子xmlns= http://www。spring框架。组织/架构/bean
xmlns:xsi= http://。w3。 org/2001/XML架构-实例
xmlns:context= http://www。spring框架。组织/架构/上下文
xsi:schemaLocation=
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www。spring框架。组织/模式/上下文/spring-context。xsd
熊。面试。线程安全。计数器/
/豆子测试类
包熊警官。面试。线程安全;
导入org。spring框架。语境。应用程序上下文;
导入组织。spring框架。语境。支持。classpathmlaplicationcontext
公共类反测试{
公共静态void main(String[] args) {
最终应用程序上下文context=new classpathmlaplicationcontext( spring _ safe。XML’);
for(int I=0;i 10i ) {
新线程(){
@覆盖
公共无效运行(){
Counter Counter=(计数器)上下文。获取bean(“计数器”);
for(int j=0;j 1000j ) {
柜台。addandprint();
}
}
}.start();
}
}
}打印结果开头和结尾
一
5
七
四
2
6
3
8
9。。
9818
9819
9820
9821
9822
9823
9824
9825期望打印出的最大值应该是10000
修改春天配置文件,把豆的作用域改为原型
?可扩展标记语言版本=1.0 编码=UTF八号?
豆子xmlns= http://www。spring框架。组织/架构/bean
xmlns:xsi= http://。w3。 org/2001/XML架构-实例
xmlns:context= http://www。spring框架。组织/架构/上下文
xsi:schemaLocation=
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www。spring框架。组织/模式/上下文/spring-context。xsd
熊。面试。线程安全。“counter”scope=“prototype”/
/豆子测试结果输出10个1000
即每个线程都创建了一个计数器对象,线程内独自计数,不存在线程安全问题。但是不是我们想要的结果,打印出10000。
所以春天管理的豆的线程安全跟豆的创建作用域和豆所在的使用环境是否存在竞态条件有关,春天并不能保证豆的线程安全。以上就是春天中的豆是线程安全的吗?的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。