Android XmlPullParser newPullParse线程安全
为什么下面的代码不是线程安全的,以及如何修复它Android XmlPullParser newPullParse线程安全,android,thread-safety,xmlpullparser,Android,Thread Safety,Xmlpullparser,为什么下面的代码不是线程安全的,以及如何修复它 public abstract class BaseResponseHandler extends AsyncHttpResponseHandler { private static XmlPullParserFactory xmlPullParserFactory; public static synchronized XmlPullParser newPullParser(String input) throws XmlPul
public abstract class BaseResponseHandler extends AsyncHttpResponseHandler {
private static XmlPullParserFactory xmlPullParserFactory;
public static synchronized XmlPullParser newPullParser(String input) throws XmlPullParserException {
if (xmlPullParserFactory == null) {
xmlPullParserFactory = XmlPullParserFactory.newInstance();
}
final XmlPullParser parser = xmlPullParserFactory.newPullParser();
parser.setInput(new StringReader(input));
return parser;
}
}
两种可能的方法:
1) 在每次调用中创建多个实例。这是昂贵的,但因为它不是线程安全的,这是一种选择
XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
final XmlPullParser parser = xmlPullParserFactory.newPullParser();
parser.setInput(new StringReader(input));
2) 创建一个实例,并使用它在每次同步下创建不同的解析器
XmlPullParser parser = null;
synchronized(xmlPullParserFactory) {
parser = xmlPullParserFactory.newPullParser();
}
在高并发性下,选项1比选项2快得多。我建议您选择选项1。xmlPullParserFactory不同步,如何修复该代码?