問(wèn)題背景:
在Go端開(kāi)啟協(xié)程并發(fā)請(qǐng)求java端的同一個(gè)接口讥裤,java端返回給Go端的數(shù)據(jù)會(huì)經(jīng)常變化放棒。比如: 第一次請(qǐng)求返回了aa,第二次請(qǐng)求就會(huì)返回bb姻报。
分析問(wèn)題的原因:
是java端定義了類(lèi)變量己英,在方法中,給類(lèi)變量重新賦值了吴旋。導(dǎo)致同一個(gè)請(qǐng)求多次返回的值不一樣损肛。
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被重新賦值了。并發(fā)會(huì)有問(wèn)題
}
}
解決方法:
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 做成局部變量
}
}
得出結(jié)論:
定義類(lèi)變量和局部變量要注意使用的場(chǎng)景荣瑟,如果有并發(fā)治拿,注意類(lèi)變量是否會(huì)被更改。