线程安全问题

线程安全:

随手记录线程安全问题


定义:

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

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

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


反思:

在spring管理Bean 中,是否会导致线程安全问题的出现,具体代码做一个示例测试看看

服务类代码

/**
 * @author ssl
 * @date 2021-12-01
 */
@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 只有还在生命周期内,并不会重新申请内存空间,也就是在高并发多线程下会出现线程安全问题,小白一枚,说错请指正
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值