java线程安全的成员变量_Java多线程对于成员变量和局部变量的影响

今天配合同事一起和外部系统进行联调测试,其实昨天我们已经成功走通了一遍。今天同事得到对方反馈系统可能有一个潜在的问题,所以就又严格地联调了一遍。这一遍,我也是一遍又一遍地盯日志,关注告警邮件。正是在这一遍联调系统中,我发现了一个小问题,程序里面一封相同内容的通知邮件,几乎是同一个时间发送了两次。

通过分析日志外加比对代码,终于找到问题,是遇到线程安全问题引起的。下面和大家分享一下,伪代码:

public class Email{

private String emailContent;

@Async

public void sendEmail(){

"send email" + emailContent;

}

}

//Email类的实例被Spring容器管理,只有一个实例emailInstance。

public class TestDemo{

@Resource

Email emailInstance;

@Async

public void testMethod(){

lock();

//处理业务逻辑,同时操作emailInstance.emailContent;

operationBs();

emailInstance. sendEmail();

unlock();

}

}

问题原因复述:testMethod方法为防止多线程同时操作,在此处使用了锁,而为了确保发送邮件不影响主

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值