我有一个进行 xml 解析的函数。我想让函数线程安全,但也要尽可能优化(减少阻塞)。
简而言之,代码如下:
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(is); 每个线程
我认为(2)是最好的,但是这样做安全吗?我也可以通过同步来避免阻塞吗?我希望它尽可能快。
谢谢?