gpt4 book ai didi

java - 单例线程安全 SAX 解析器实例

转载 作者:行者123 更新时间:2023-11-30 06:52:03 24 4
gpt4 key购买 nike

我想创建一个线程安全的 SAX 解析器的单例实例。

但是我不能使用按需惯用语,因为 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 是安全的假设是错误的。请参阅下面的链接。

https://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/api/javax/xml/parsers/SAXParserFactory.html

早些时候我也觉得 SAXParser 是线程安全的,有时我会遇到以下错误,这是在一个线程已经在使用解析器对象解析 xml 时发生的,同时其他线程也尝试使用相同的目的。当我为每个线程创建 SAXParser 实例时,异常得到修复。


org.xml.sax.SAXException:解析时可能无法调用 FWK005 解析。
在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1253)~[na:1.8.0_20]
在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)~[na:1.8.0_20]
在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:333)~[na:1.8.0_20]
在 javax.xml.parsers.SAXParser.parse(SAXParser.java:195)~[na:1.8.0_20]

关于java - 单例线程安全 SAX 解析器实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39658247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com