两个线程调用一个方法

时间:2013-10-31 08:34:41

标签: java multithreading

我有一个写这样的XML文件的方法:

private void doProcess() {

    Element rootElement = mDoc.createElement("Test");
    mDoc.appendChild(rootElement);

....... I build the whole document here... 
}

但是这个方法可以被多个线程调用,所以例如如果两个线程同时调用这个方法我得到一个

): org.w3c.dom.DOMException: Only one root element allowed

我已经用重入锁定尝试了它,但这不起作用...有人可以给我一个提示吗?

编辑:

我没有使用多个线程构建文档...我的方法的每次调用都构建了自己的文档...所以有时在我的应用程序中,我的方法将同时被调用两次......有我的问题...

2 个答案:

答案 0 :(得分:2)

在你提出的问题中:

  

我没有使用多个线程构建文档...我的方法的每次调用都会构建自己的Doc

目前,给定的代码在函数的所有调用之间共享一个doc。为了让每个函数调用都在它自己的文档上工作,你需要修改代码,使每个调用都拥有它自己的文档。

这可以通过创建和返回新的文档对象来完成

private XMLDocument doProcess() {
  XMLDocument mDoc = new XMLDocument(); // or simmilar depending on XML library
  Element rootElement = mDoc.createElement("Test");
  mDoc.appendChild(rootElement);

  // ....... I build the whole document here... 

  return mDoc; //return the document object
}

或者,将文档对象作为参数传递

private void doProcess(XMLDocument mDoc) { ... }

答案 1 :(得分:1)

xml只能有一个root,所以这可能是你问题的答案。您可以在此方法之外实例化根元素,并在每次向方法内部添加元素。