栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程安全问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程安全问题

线程安全:

随手记录线程安全问题


定义:

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。

线程安全问题都是由全局变量及静态变量引起的。


反思: 在spring管理Bean 中,是否会导致线程安全问题的出现,具体代码做一个示例测试看看
服务类代码
@Service
public class TestService {
	//全局属性
	IdisIdentity idisIdentity = new IdisIdentity();


	public IdisIdentity getIdisIdentity() {
		return idisIdentity;
	}

	public void setIdisIdentity(IdisIdentity idisIdentity) {
		this.idisIdentity = idisIdentity;
	}

	public IdisIdentity  getMethodN(){
	//方法内部属性
		IdisIdentity is = new IdisIdentity();
		return is;
	}
}




获取对象真是内存地址进行检测
注入的bean 属性内存地址获取
System.identityHashCode(testService.getIdisIdentity())

注入的bean 方法内 属性内存地址获取
System.identityHashCode(testService.getMethodN())

//返回结果
//第一次
{
    "code": 200,
    "success": true,
    "data": {
        "all": 105265920,
        "min": 1130838556
    },
    "msg": "操作成功"
}
//第N次
{
    "code": 200,
    "success": true,
    "data": {
        "all": 105265920,
        "min": 105865357
    },
    "msg": "操作成功"
}

总结: 通过以上代码测试验证,spring 管理的bean 只有还在生命周期内,并不会重新申请内存空间,也就是在高并发多线程下会出现线程安全问题,小白一枚,说错请指正
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/632275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号