问题背景:
在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 做成局部变量
}
}
得出结论:
定义类变量和局部变量要注意使用的场景,如果有并发,注意类变量是否会被更改。
网友评论