Я хочу создать экземпляр singleton синтаксического анализатора SAX, который является потокобезопасным.Singleton thread safe SAX parser instance
Но я не могу использовать по требованию идиому, поскольку синтаксический анализатор SAX вызывает исключение SAXException, которое невозможно обработать, если оно сделало переменную класса. Вот код, который я написал.
public class Parser {
private static SAXParser parser;
Parser() throws ParserConfigurationException, SAXException {
if (parser==null)
parser=LazyHolder.factory.newSAXParser();
}
private static class LazyHolder {
private static final SAXParserFactory factory=SAXParserFactory.newInstance();
}
public SAXParser getInstance() {
return parser;
}
}
Есть ли лучший способ его достижения?
Я не понимаю, как это должно работать. Вы хотите, чтобы несколько потоков использовали один экземпляр SAXParser? И когда один поток использует этот экземпляр, другие не могут, я прав? –
Нет Я хочу, чтобы что-то вроде одного экземпляра SAXParser можно было использовать разными потоками одновременно. Это действительно возможно? –
Новые экземпляры парсеров немного дорогостоящие. Есть ли эффективный способ повторного использования одинаковых экземпляров в нескольких потоках. У меня проблемы с пониманием. –