Java类变量使用不当引发的bug

2018-07-12  本文已影响2人  caoxinyiyi

问题背景:

在Go端开启协程并发请求java端的同一个接口,java端返回给Go端的数据会经常变化。比如: 第一次请求返回了aa,第二次请求就会返回bb。

分析问题的原因:

是java端定义了类变量,在方法中,给类变量重新赋值了。导致同一个请求多次返回的值不一样。

Demo

public class MapTypeService implements IMapType{
      DataParam DataParamObj = new DataParam() ;
       String module = "mapType";
       public Map<Boolean,Byte> testMapNull(Map<Boolean,Byte> param ,String javaMapKey) throws Exception{
        DataParamObj = DataDrive.getDataParamFromMap(this.module,javaMapKey);    //DataParamObj被重新赋值了。并发会有问题
        }
}

解决方法:

public class MapTypeService implements IMapType{
  
       String module = "mapType";
       public Map<Boolean,Byte> testMapNull(Map<Boolean,Byte> param ,String javaMapKey) throws Exception{
      DataParam   DataParamObj = DataDrive.getDataParamFromMap(this.module,javaMapKey);    //DataParamObj 做成局部变量
        }
}

得出结论:
定义类变量和局部变量要注意使用的场景,如果有并发,注意类变量是否会被更改。

上一篇下一篇

猜你喜欢

热点阅读