Если вы повторно используете поток (как в пуле потоков), вы можете объявить ваш DocumentBuilderFactory как локальный поток.Существуют издержки на создание нового набора для каждого потока, но, как я уже сказал, если вы пересматриваете, последующие издержки очень малы.
final ThreadLocal<DocumentBuilderFactory> documentBuilderFactor = new ThreadLocal<DocumentBuilderFactory>(){
public DocumentBuilderFactory initialValue(){
return DocumentBuilderFactory.newInstance();
}
}
public Document doXML(InputStream s)
{
//Some processing.
DocumentBuilderFactory factory = documentBuilderFactor.get();
DocumentBuilder parser = factory.newDocumentBuilder();
Document xmlDoc = parser.parse(is);
return xmlDoc;
}
Здесь вы создадите только один DocumentBuilderFactory для каждого потока.
Я не знаю, является ли DocumentBuilder потокобезопасным при разборе (является ли он неизменным?).Но если DocumentBuilder является потокобезопасным при синтаксическом анализе, вы можете использовать тот же механизм, что и я.
Это разрешение сделает общую пропускную способность максимально быстрой.
Примечание. Это не было проверено или скомпилированопросто дает представление о том, что я имею в виду.