多线程对象传递的坑

高并发&多线程环境下的对象传递

高并发环境下,很多莫名其妙的问题会出现。通过单元测试跑通的代码,真正并发起来后就会出现各种奇葩问题。最坑的,就是父子线程间或同一线程的不同类不同方法间的变量传递。按照单线程的思维去考虑,完全木有任何问题,但是并发起来,由于多线程间的上下文切换和java指令重排序的影响,就会出现变量获取不到的问题。 

上代码: 




如上图中,在父线程中定义对象timer。同时子线程,setSSLStopTime中会用到该对象,调用其stop方法。从代码上来看,不存在什么问题。父线程中的public对象可以被内部类子线程访问。但是真正并发执行时,就会有很大的概率不能成功调用。


代码如下图修改,将timer对象作为参数传至子线程。便不会出现访问不到的情况。



 


可能的原因,笔者认为是多线程间的上下文切换或java指令重排序的影响。另外,编码过程中尽量遵循开闭原则。对象尽可能多的提供服务,减少变量被直接访问。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值