我有一个函数可以执行xml解析。我想使函数线程安全,但也尽可能优化(更少的阻塞)。
在短码的东西如下:关于多线程的java多线程
public Document doXML(InputStream s)
{
//Some processing.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document xmlDoc = parser.parse(is);
return xmlDoc;
}
但我不希望创建每次调用一个新的DocumentBuilderFactory或其的DocumentBuilder。
我想重用工厂和解析器,但我不确定它们是线程安全的。那么最优化的方法是什么?
1)在类字段中缓存DocumentBuilderFactory并同步factory.newDocumentBuilder();以便每个线程具有它自己的DocumentBuilder
实例 2)缓存一个的DocumentBuilderFactory 和的DocumentBuilder和同步parser.parse(是);每个线程
我认为(2)是最好的,但它是安全的吗?我也可以通过同步避免阻塞?我希望它尽可能快。
谢谢?
我不是很确定。在这个代码示例中,您不需要使用同步方法。由于没有共享对象来保护您的资源。如果你有任何共享的公共对象,你必须同步它们才能相互排斥。 – 2010-11-18 16:51:36
@Mohamed Saligh:我想让DocumentBuilder和DocumentBuilderFactory共享。现在,你是对的没有问题 – Cratylus 2010-11-18 17:01:53