今天做项目的时候遇到一个问题,在调用多线程接口时传递参数如下:
AService aService = new AService(threadGroup, "aService", aMap, iClientBridge);
aService.start();
接口内部代码如下:
private Map<String, Object> params;
public AService(ThreadGroup threadGroup, String name, Map<String, Object> aParams, IClientBridge iClientBridge) {
super(threadGroup, name);
this.params = aParams;
this.iClientBridge = iClientBridge;
}
public void run() {
queryData(params)
}
public void queryData( Map<String, Object> , params) {
params.put("destGroupName", destName);
}
调用结束后
while (aService.isAlive()) {
Thread.sleep(10);
}
String destGroupName=(String) aMap.get("destGroupName");
当时一直奇怪为啥在原本的aMap中并没有添加“destGroupName”,只是接口中的属性做了操作,按照以前的理解这值传不过来啊,然后去问了下老大,先是被喷呗,然后说这是java里的引用传递(就是值传递传的引用地址),在this.params = aParams;这个代码中实际上params和aMap是一个引用地址,后面不管谁操作,双方都会改变值,然后百度一堆资料,自己再试了试,果然是这样。。