下面是大概的程序,没有访问临界资源,我想下面可能并发:因为执行到 getWebservicDoc 的String soap = getSoapRequest(docId);可能多个docId 一起执行getSoapRequest 返回 soap ,这个时候 DocumentWebService的 soap 不能确定是执行哪个 docId 返回的 soap ,大家帮忙分析一下。谢谢!public void run() {
Dowloader down = new Dowloader();
try {
down.downDocumentInfoXml(list,dir);
} catch (Exception e) {
e.printStackTrace();
}
}
public void downDocumentInfoXml(List<String> list, String dir)
throws DownLoadException {
XmlHandle handle = new XmlHandle();
if (list != null) {
for (String fileId : list) {
String resposeSoap = getWebservicDoc(fileId);
handle.createXmlFormString(dir + "/" + fileId + ".xml",
resposeSoap); }
} }public String getWebservicDoc(String docId){String soap = getSoapRequest(docId);
DocumentWebService webService = new DocumentWebService(login, res
.getString("webserviceUrl"), soap);
}
Dowloader down = new Dowloader();
try {
down.downDocumentInfoXml(list,dir);
} catch (Exception e) {
e.printStackTrace();
}
}
public void downDocumentInfoXml(List<String> list, String dir)
throws DownLoadException {
XmlHandle handle = new XmlHandle();
if (list != null) {
for (String fileId : list) {
String resposeSoap = getWebservicDoc(fileId);
handle.createXmlFormString(dir + "/" + fileId + ".xml",
resposeSoap); }
} }public String getWebservicDoc(String docId){String soap = getSoapRequest(docId);
DocumentWebService webService = new DocumentWebService(login, res
.getString("webserviceUrl"), soap);
}
这个问题,适当加大JVM的内存就可以解决。
至于并发,你要考虑的就是原子操作,可以将某段代码同步起来。
public String getWebservicDoc(String docId){String soap = getSoapRequest(docId);
DocumentWebService webService = new DocumentWebService(login, res
.getString("webserviceUrl"), soap);
}