下面是大概的程序,没有访问临界资源,我想下面可能并发:因为执行到 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);
}

解决方案 »

  1.   

    而且 在多线程如果适用了stringbuffer 经常出现 java.lang.OutOfMemoryError: Java heap space,有什么好的办法?
      

  2.   

    java.lang.OutOfMemoryError: Java heap space
    这个问题,适当加大JVM的内存就可以解决。
    至于并发,你要考虑的就是原子操作,可以将某段代码同步起来。
      

  3.   

    在测试的时候,我没有同步 可以正常运行,产生文件,  返回一个soap ,然后根据soap 生成文件。
    public String getWebservicDoc(String docId){String soap = getSoapRequest(docId);
    DocumentWebService webService = new DocumentWebService(login, res
    .getString("webserviceUrl"), soap);
    }